深入掌握JMS(四):实战Queue

来源:互联网 发布:大学宿舍网络怎么样 编辑:程序博客网 时间:2024/04/30 15:51

    Queue实现的是点到点模型,在下面的例子中,启动2个消费者共同监听一个Queue,然后循环给这个Queue中发送多个消息,我们依然采用ActiveMQ。

[java] view plaincopy
  1. import javax.jms.Connection;  
  2. import javax.jms.DeliveryMode;  
  3. import javax.jms.JMSException;  
  4. import javax.jms.Message;  
  5. import javax.jms.MessageConsumer;  
  6. import javax.jms.MessageListener;  
  7. import javax.jms.MessageProducer;  
  8. import javax.jms.Queue;  
  9. import javax.jms.Session;  
  10. import javax.jms.TextMessage;  
  11. import org.apache.activemq.ActiveMQConnectionFactory;  
  12. import org.apache.activemq.command.ActiveMQQueue;  
  13.   
  14. public class QueueTest {  
  15.     public static void main(String[] args) throws Exception {  
  16.         ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");  
  17.      
  18.         Connection connection = factory.createConnection();  
  19.         connection.start();  
  20.          
  21.   
  22.         //创建一个Queue  
  23.         Queue queue = new ActiveMQQueue("testQueue");  
  24.         //创建一个Session  
  25.         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);  
  26.          
  27.   
  28.         //注册消费者1  
  29.         MessageConsumer comsumer1 = session.createConsumer(queue);  
  30.         comsumer1.setMessageListener(new MessageListener(){  
  31.             public void onMessage(Message m) {  
  32.                 try {  
  33.                     System.out.println("Consumer1 get " + ((TextMessage)m).getText());  
  34.                 } catch (JMSException e) {  
  35.                     e.printStackTrace();  
  36.                 }  
  37.             }  
  38.         });  
  39.          
  40.   
  41.         //注册消费者2  
  42.         MessageConsumer comsumer2 = session.createConsumer(queue);  
  43.         comsumer2.setMessageListener(new MessageListener(){  
  44.             public void onMessage(Message m) {  
  45.                 try {  
  46.                     System.out.println("Consumer2 get " + ((TextMessage)m).getText());  
  47.                 } catch (JMSException e) {  
  48.                     e.printStackTrace();  
  49.                 }  
  50.             }  
  51.              
  52.         });  
  53.          
  54.   
  55.         //创建一个生产者,然后发送多个消息。  
  56.         MessageProducer producer = session.createProducer(queue);  
  57.         for(int i=0; i<10; i++){  
  58.             producer.send(session.createTextMessage("Message:" + i));  
  59.         }  
  60.     }  
  61. }  

  运行这个例子会得到下面的输出结果:

[java] view plaincopy
  1. Consumer1 get Message:0  
  2. Consumer2 get Message:1  
  3. Consumer1 get Message:2  
  4. Consumer2 get Message:3  
  5. Consumer1 get Message:4  
  6. Consumer2 get Message:5  
  7. Consumer1 get Message:6  
  8. Consumer2 get Message:7  
  9. Consumer1 get Message:8  
  10. Consumer2 get Message:9  
 
  可以看出每个消息直被消费了一次,但是如果有多个消费者同时监听一个Queue的话,无法确定一个消息最终会被哪一个消费者消费。

转载:http://blog.csdn.net/zhangxs_3/article/details/4034801