[原創]深入掌握JMS(七):DeliveryMode例子
在下面的例子中,分別傳送一個Persistent和nonpersistent的訊息,然後關閉退出JMS。
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
public class DeliveryModeSendTest {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
Queue queue = new ActiveMQQueue("testQueue");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(queue);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
producer.send(session.createTextMessage("A persistent Message"));
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
producer.send(session.createTextMessage("A non persistent Message"));
System.out.println("Send messages sucessfully!");
}
}
執行上面的程式,當輸出“Send messages sucessfully!”時,說明兩個訊息都已經傳送成功,然後我們結束它,來停止JMS Provider。
接下來我們重新啟動JMS Provicer,然後新增一個消費者:
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
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 DeliveryModeReceiveTest {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
Queue queue = new ActiveMQQueue("testQueue");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer comsumer = session.createConsumer(queue);
comsumer.setMessageListener(new MessageListener(){
public void onMessage(Message m) {
try {
System.out.println("Consumer get " + ((TextMessage)m).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
}
執行上面的程式,可以得到下面的輸出結果:
Consumer get A persistent Message
可以看出訊息消費者只接收到一個訊息,它是一個Persistent的訊息。而剛才傳送的non persistent訊息已經丟失了。
另外, 如果傳送一個non persistent訊息, 而剛好這個時候沒有消費者在監聽, 這個訊息也會丟失.
import javax.jms.Connection;
import javax.jms.DeliveryMode;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.Session;
import org.apache.activemq.ActiveMQConnectionFactory;
import org.apache.activemq.command.ActiveMQQueue;
public class DeliveryModeSendTest {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
Queue queue = new ActiveMQQueue("testQueue");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageProducer producer = session.createProducer(queue);
producer.setDeliveryMode(DeliveryMode.PERSISTENT);
producer.send(session.createTextMessage("A persistent Message"));
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
producer.send(session.createTextMessage("A non persistent Message"));
System.out.println("Send messages sucessfully!");
}
}
執行上面的程式,當輸出“Send messages sucessfully!”時,說明兩個訊息都已經傳送成功,然後我們結束它,來停止JMS Provider。
接下來我們重新啟動JMS Provicer,然後新增一個消費者:
import javax.jms.Connection;
import javax.jms.JMSException;
import javax.jms.Message;
import javax.jms.MessageConsumer;
import javax.jms.MessageListener;
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 DeliveryModeReceiveTest {
public static void main(String[] args) throws Exception {
ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory("vm://localhost");
Connection connection = factory.createConnection();
connection.start();
Queue queue = new ActiveMQQueue("testQueue");
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
MessageConsumer comsumer = session.createConsumer(queue);
comsumer.setMessageListener(new MessageListener(){
public void onMessage(Message m) {
try {
System.out.println("Consumer get " + ((TextMessage)m).getText());
} catch (JMSException e) {
e.printStackTrace();
}
}
});
}
}
執行上面的程式,可以得到下面的輸出結果:
Consumer get A persistent Message
可以看出訊息消費者只接收到一個訊息,它是一個Persistent的訊息。而剛才傳送的non persistent訊息已經丟失了。
另外, 如果傳送一個non persistent訊息, 而剛好這個時候沒有消費者在監聽, 這個訊息也會丟失.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10742815/viewspace-580331/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- [原創]深入掌握JMS(四):實戰Queue
- [原創]深入掌握JMS(五):實戰Topic
- [原創] 深入掌握JMS(一):JSM基礎JS
- [原創]深入掌握JMS(十一):TemporaryQueue和TemporaryTopic
- 深入淺出JMS(一)——JMS簡單介紹
- Oracle中Hint深入理解(原創)Oracle
- 深入掌握service
- 【原創】ORACLE 深入解析10053事件Oracle事件
- [原創]成功網上商店的七大特徵特徵
- 偶想做了一個jms例子,找到了jboss的書上的例子執行在了eclipse中了Eclipse
- 創業團隊工作溝通的七個原則創業團隊
- Hollis原創|深入分析Java的編譯原理Java編譯原理
- (原創)建立windows域—深入理解域概念薦Windows
- elasticsearch(七)---深入分片Elasticsearch
- 6 個例子讓初學者掌握 free 命令
- 【原創】彼得德魯克《管理的實踐》札記(七)
- JMS學習(一):初識JMS
- 【原創】【深入淺出系列】之程式碼可讀性
- 深入掌握Java中的enumJava
- 深入掌握K8S PodK8S
- [原創]SpriteKit+Swift學習筆記(七)-簡述碰撞檢測Swift筆記
- [譯] 用個實在例子來教你掌握 Async/AwaitAI
- 深入C++06:深入掌握OOP最強大的機制C++OOP
- 七個例子幫你更好地理解 CPU 快取快取
- jms過濾器過濾器
- 【原創】淺談指標(七)字串相關(詳細版本)與指標運算指標字串
- 你應該掌握的七種迴歸技術
- Android Application物件必須掌握的七點AndroidAPP物件
- Java (原創) (轉)Java
- 透過8個小例子帶你掌握Linux Head命令!Linux
- 深入理解Java物件例項生成的例子!(轉)Java物件
- 原創文章檢測工具,檢測原創文章,過不了原創賬號的原因在這
- 8.掌握了Dart中的函式,你就掌握了原力!Dart函式
- Java JMS 極簡演示Java
- JMS監聽Oracle AQOracle
- activeMQ JMS監控配置MQ
- 求助:JMS的實現
- 【原創】Linux虛擬化KVM-Qemu分析(七)之timer虛擬化Linux