天天看点

ActiveMQ之Queue

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

代码如下:

public class QueueTest {

/**

* @param args

*/

public static void main(String[] args) {

ActiveMQConnectionFactory factory=new ActiveMQConnectionFactory("vm://localhost");

Connection con=null;

Session session=null;

Queue queue=null;

try {

con=factory.createConnection();

//这句很重要

con.start();

} catch (JMSException e) {

e.printStackTrace();

}

try {

session=con.createSession(false, Session.AUTO_ACKNOWLEDGE);

} catch (JMSException e) {

System.out.println("--创建Session出现错误--");

}

queue=new ActiveMQQueue("testQueue");

//注册消费者1

try {

MessageConsumer consumer1=session.createConsumer(queue);

consumer1.setMessageListener(new MessageListener(){

public void onMessage(Message arg0) {

try {

System.out.println("消费者1接收到的消息 ---------"+((TextMessage)arg0).getText());

} catch (JMSException e) {

e.printStackTrace();

}

}

});

} catch (JMSException e) {

e.printStackTrace();}

//注册消费者2

try {

MessageConsumer consumer2=session.createConsumer(queue);

consumer2.setMessageListener(new MessageListener(){

public void onMessage(Message arg0) {

try {

System.out.println("消费者2接收到的消息---------"+((TextMessage)arg0).getText());

} catch (JMSException e) {

e.printStackTrace();

}

}

});

} catch (JMSException e) {

e.printStackTrace();

}

//注册一个消息生产者

try {

MessageProducer procedure=session.createProducer(queue);

for(int i=1;i<=10;i++)

{

procedure.send(session.createTextMessage("message"+i));

}

} catch (JMSException e) {

e.printStackTrace();

}

}

}

运行这个例子 可以看出:每个消息被消费了一次,但是如果有多个消费者共同监听一个Queue的话,无法确定一个消息最终会被那个消费者消费。