首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

深入JMS - 四 - 发布/订阅

2012-10-21 
深入JMS - 4 - 发布/订阅与Queue不同的是,Topic实现的是发布/订阅模型,在下面的例子中,启动2个消费者共同

深入JMS - 4 - 发布/订阅
与Queue不同的是,Topic实现的是发布/订阅模型,在下面的例子中,启动2个消费者共同监听一个Topic,然后循环给这个Topic中发送多个消息。

import javax.jms.Connection;import javax.jms.JMSException;import javax.jms.Message;import javax.jms.MessageConsumer;import javax.jms.MessageListener;import javax.jms.MessageProducer;import javax.jms.Session;import javax.jms.TextMessage;import javax.jms.Topic;import org.apache.activemq.ActiveMQConnectionFactory;import org.apache.activemq.command.ActiveMQTopic;public class TopicTest {    public static void main(String[] args) throws Exception {        ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");           Connection connection = factory.createConnection();        connection.start();               //创建一个Topic        Topic topic= new ActiveMQTopic("testTopic");        Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);                //注册消费者1        MessageConsumer comsumer1 = session.createConsumer(topic);        comsumer1.setMessageListener(new MessageListener(){            public void onMessage(Message m) {                try {                    System.out.println("Consumer1 get " + ((TextMessage)m).getText());                } catch (JMSException e) {                    e.printStackTrace();                }            }        });               //注册消费者2        MessageConsumer comsumer2 = session.createConsumer(topic);        comsumer2.setMessageListener(new MessageListener(){            public void onMessage(Message m) {                try {                    System.out.println("Consumer2 get " + ((TextMessage)m).getText());                } catch (JMSException e) {                    e.printStackTrace();                }            }                   });               //创建一个生产者,然后发送多个消息。        MessageProducer producer = session.createProducer(topic);        for(int i=0; i<10; i++){            producer.send(session.createTextMessage("Message:" + i));        }    }}运行后得到下面的输出结果:Consumer1 get Message:0Consumer2 get Message:0Consumer1 get Message:1Consumer2 get Message:1Consumer1 get Message:2Consumer2 get Message:2Consumer1 get Message:3Consumer2 get Message:3Consumer1 get Message:4Consumer2 get Message:4Consumer1 get Message:5Consumer2 get Message:5Consumer1 get Message:6Consumer2 get Message:6Consumer1 get Message:7Consumer2 get Message:7Consumer1 get Message:8Consumer2 get Message:8Consumer1 get Message:9Consumer2 get Message:9

热点排行