[原創]深入掌握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));
}
}
}
執行這個例子會得到下面的輸出結果:
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的話,無法確定一個訊息最終會被哪一個消費者消費。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10742815/viewspace-580256/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [原創]深入掌握JMS(五):實戰Topic
- [原創]深入掌握JMS(七):DeliveryMode例子
- [原創] 深入掌握JMS(一):JSM基礎JS
- [原創]深入掌握JMS(十一):TemporaryQueue和TemporaryTopic
- 深入淺出JMS(一)——JMS簡單介紹
- 實戰JBuilder7+WebLogic7(四)續JMS+Message-Driven Bean (轉)UIWebBean
- 大資料時代怎樣深入淺出的掌握Scala實戰技能?大資料
- 【原創】淺談指標(四)指標
- Oracle中Hint深入理解(原創)Oracle
- 深入掌握service
- 【原創】彼得德魯克《管理的實踐》札記(四)
- 【原創】ORACLE 深入解析10053事件Oracle事件
- 求助:JMS的實現
- 深入理解GCD之dispatch_queueGC
- Audio Queue 採集音訊實戰(支援不同格式)音訊
- Hollis原創|深入分析Java的編譯原理Java編譯原理
- (原創)建立windows域—深入理解域概念薦Windows
- Nginx實戰(四) 限速功能Nginx
- ItemDecoration深入解析與實戰(一)
- 例說資料結構&STL(四)——queue資料結構
- JMS學習(一):初識JMS
- 【原創】003 | 搭上基於SpringBoot事務思想實戰專車Spring Boot
- 【原創】【深入淺出系列】之程式碼可讀性
- 深入掌握Java中的enumJava
- Express 實戰(四):中介軟體Express
- banq的J2EE實戰開發原創教程是不是錯了?????
- 深入Django專案實戰與最佳實踐Django
- 深入掌握K8S PodK8S
- 深入掌握 ECMAScript 6 非同步程式設計(四):async函式的含義與用法非同步程式設計函式
- 佇列(Queue)-c實現佇列
- 如何實現文章AI偽原創?AI
- 實施在系統外(原創)
- 微服務實戰之春雲與刀客(四)——dockerswarm叢集實戰微服務DockerSwarm
- ItemDecoration深入解析與實戰(二)—— 實際運用
- 深入淺出Nginx實戰與架構Nginx架構
- 深入Weex系列(二)之列表頁實戰
- client-go實戰之四:dynamicClientclientGo
- OpenFaaS實戰之四:模板操作(template)