zoukankan      html  css  js  c++  java
  • 深入掌握JMS(四):实战Queue[转]

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

    import javax.jms.Connection;
    import javax.jms.DeliveryMode;
    import javax.jms.JMSException;
    import javax.jms.Message;
    import javax.jms.MessageConsumer;
    import javax.jms.MessageListener;
    import javax.jms.MessageProducer;
    import javax.jms.Queue;
    import javax.jms.Session;
    import javax.jms.TextMessage;

    import org.apache.activemq.ActiveMQConnectionFactory;
    import org.apache.activemq.command.ActiveMQQueue;


    public class QueueTest {

    public static void main(String[] args) throws Exception {
    ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");

    Connection connection = factory.createConnection();
    connection.start();

            //创建一个Queue
    Queue queue = new ActiveMQQueue("testQueue");

            //创建一个Session
    Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

            //注册消费者1
    MessageConsumer comsumer1 = session.createConsumer(queue);
    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(queue);
    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(queue);
    for(int i=0; i<10; i++){
    producer.send(session.createTextMessage("Message:" + i));
    }
    }

    }

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

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

    可以看出每个消息直被消费了一次,但是如果有多个消费者同时监听一个Queue的话,无法确定一个消息最终会被哪一个消费者消费。 
  • 相关阅读:
    HDU 3401 Trade
    POJ 1151 Atlantis
    HDU 3415 Max Sum of MaxKsubsequence
    HDU 4234 Moving Points
    HDU 4258 Covered Walkway
    HDU 4391 Paint The Wall
    HDU 1199 Color the Ball
    HDU 4374 One hundred layer
    HDU 3507 Print Article
    GCC特性之__init修饰解析 kasalyn的专栏 博客频道 CSDN.NET
  • 原文地址:https://www.cnblogs.com/jjj250/p/2524013.html
Copyright © 2011-2022 走看看