天天看點

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的話,無法确定一個消息最終會被那個消費者消費。