厚積而薄發(fā)

          山不辭土,故能成其高;海不辭水,故能成其深!
          posts - 15, comments - 0, trackbacks - 0, articles - 1
          與Queue不同的是,Topic實(shí)現(xiàn)的是發(fā)布/訂閱模型,在下面的例子中,啟動(dòng)2個(gè)消費(fèi)者共同監(jiān)聽一個(gè)Topic,然后循環(huán)給這個(gè)Topic中發(fā)送多個(gè)消息。

          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();
                 
                  //創(chuàng)建一個(gè)Topic
                  Topic topic= new ActiveMQTopic("testTopic");
                  Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
                  
                  //注冊(cè)消費(fèi)者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();
                          }
                      }
                  });
                 
                  //注冊(cè)消費(fèi)者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();
                          }
                      }
                     
                  });
                 
                  //創(chuàng)建一個(gè)生產(chǎn)者,然后發(fā)送多個(gè)消息。
                  MessageProducer producer = session.createProducer(topic);
                  for(int i=0; i<10; i++){
                      producer.send(session.createTextMessage("Message:" + i));
                  }
              }

          }

          運(yùn)行后得到下面的輸出結(jié)果:

          Consumer1 get Message:0
          Consumer2 get Message:0
          Consumer1 get Message:1
          Consumer2 get Message:1
          Consumer1 get Message:2
          Consumer2 get Message:2
          Consumer1 get Message:3
          Consumer2 get Message:3
          Consumer1 get Message:4
          Consumer2 get Message:4
          Consumer1 get Message:5
          Consumer2 get Message:5
          Consumer1 get Message:6
          Consumer2 get Message:6
          Consumer1 get Message:7
          Consumer2 get Message:7
          Consumer1 get Message:8
          Consumer2 get Message:8
          Consumer1 get Message:9
          Consumer2 get Message:9

          說明每一個(gè)消息都會(huì)被所有的消費(fèi)者消費(fèi)。

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 海伦市| 桐柏县| 石棉县| 乾安县| 岢岚县| 鄂尔多斯市| 庆云县| 辽阳市| 沾益县| 武川县| 偃师市| 万山特区| 疏附县| 调兵山市| 余干县| 勃利县| 芦溪县| 喀喇沁旗| 兴隆县| 观塘区| 林周县| 岳普湖县| 文山县| 镇平县| 锡林郭勒盟| 潮安县| 兰溪市| 固安县| 安乡县| 彭阳县| 化州市| 屏东县| 商丘市| 吴忠市| 曲沃县| 天台县| 锡林郭勒盟| 太和县| 纳雍县| 息烽县| 宾川县|