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

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

  1. importjavax.jms.Connection;
  2. importjavax.jms.DeliveryMode;
  3. importjavax.jms.JMSException;
  4. importjavax.jms.Message;
  5. importjavax.jms.MessageConsumer;
  6. importjavax.jms.MessageListener;
  7. importjavax.jms.MessageProducer;
  8. importjavax.jms.Queue;
  9. importjavax.jms.Session;
  10. importjavax.jms.TextMessage;
  11. importorg.apache.activemq.ActiveMQConnectionFactory;
  12. importorg.apache.activemq.command.ActiveMQQueue;
  13. publicclassQueueTest{
  14. publicstaticvoidmain(String[]args)throwsException{
  15. ActiveMQConnectionFactoryfactory=newActiveMQConnectionFactory("vm://localhost");
  16. Connectionconnection=factory.createConnection();
  17. connection.start();
  18. //创建一个Queue
  19. Queuequeue=newActiveMQQueue("testQueue");
  20. //创建一个Session
  21. Sessionsession=connection.createSession(false,Session.AUTO_ACKNOWLEDGE);
  22. //注册消费者1
  23. MessageConsumercomsumer1=session.createConsumer(queue);
  24. comsumer1.setMessageListener(newMessageListener(){
  25. publicvoidonMessage(Messagem){
  26. try{
  27. System.out.println("Consumer1get"+((TextMessage)m).getText());
  28. }catch(JMSExceptione){
  29. e.printStackTrace();
  30. }
  31. }
  32. });
  33. //注册消费者2
  34. MessageConsumercomsumer2=session.createConsumer(queue);
  35. comsumer2.setMessageListener(newMessageListener(){
  36. publicvoidonMessage(Messagem){
  37. try{
  38. System.out.println("Consumer2get"+((TextMessage)m).getText());
  39. }catch(JMSExceptione){
  40. e.printStackTrace();
  41. }
  42. }
  43. });
  44. //创建一个生产者,然后发送多个消息。
  45. MessageProducerproducer=session.createProducer(queue);
  46. for(inti=0;i<10;i++){
  47. producer.send(session.createTextMessage("Message:"+i));
  48. }
  49. }
  50. }

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

  1. Consumer1getMessage:0
  2. Consumer2getMessage:1
  3. Consumer1getMessage:2
  4. Consumer2getMessage:3
  5. Consumer1getMessage:4
  6. Consumer2getMessage:5
  7. Consumer1getMessage:6
  8. Consumer2getMessage:7
  9. Consumer1getMessage:8
  10. Consumer2getMessage:9

可以看出每个消息直被消费了一次,但是如果有多个消费者同时监听一个Queue的话,无法确定一个消息最终会被哪一个消费者消费。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值