ActiveMQ 发布订阅模式
先启动消费者,再启动生产者。
生产者:
package org.jms.demo.publish_subscribe; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class Publish { private static final String brokeURL = "tcp://localhost:61616"; private ConnectionFactory connectionFactory; private Connection connection; private Destination destination; private MessageProducer producer; private Session session; public Publish() throws JMSException { connectionFactory = new ActiveMQConnectionFactory("caolihua","caolihua",brokeURL); connection = connectionFactory.createConnection(); connection.start(); session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
//与队列不同的地方。 destination = session.createTopic("topic"); producer = session.createProducer(destination); } public void publichMessage() throws JMSException { TextMessage textMessage = this.session.createTextMessage("Topic Message"); this.producer.send(destination, textMessage); } public static void main(String[] args) throws JMSException { Publish publish = new Publish(); publish.publichMessage(); } }
有以下多个订阅者,同时收到相同的消息。
package org.jms.demo.publish_subscribe; import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageListener; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; public class Subscribe1 { private static final String brokeURL = "tcp://localhost:61616"; private ConnectionFactory connectionFactory; private Connection connection; private Destination destination; private MessageConsumer consumer; private Session session; public Subscribe1() throws JMSException { connectionFactory = new ActiveMQConnectionFactory("caolihua","caolihua",brokeURL); connection = connectionFactory.createConnection(); connection.start(); session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE); destination = session.createTopic("topic"); consumer = session.createConsumer(destination); consumer.setMessageListener(new TopicListener()); } final class TopicListener implements MessageListener { @Override public void onMessage(Message message) { if (message instanceof TextMessage) { try { System.out.println(((TextMessage) message).getText()); } catch (JMSException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } } public static void main(String[] args) throws JMSException { Subscribe1 publish = new Subscribe1(); } }

开始先启动2个consumer,再启动一个producer,如上图结果。
感谢阅读博客,欢迎向博主讨论问题。
浙公网安备 33010602011771号