ActiveMQ-MessageListener非同步回撥處理
對於訊息的接收來說,最基礎的寫法是
Message message = consumer.receive();
這種方式是同步阻塞的,只有收到訊息才會繼續執行下面的程式碼。
進一步,可以考慮使用非同步的方式,定義一個監聽器,負責處理收到的訊息。
consumer.setMessageListener(new MyListener());
具體的Listener類要實現MessageListener介面。在onMessage()方法中進行訊息的處理。
package phs.activemq.listener;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.Serializable;
import javax.jms.BytesMessage;
import javax.jms.JMSException;
import javax.jms.MapMessage;
import javax.jms.Message;
import javax.jms.MessageListener;
import javax.jms.ObjectMessage;
import javax.jms.TextMessage;
import bean.Girl;
public class MyListener implements MessageListener{
@Override
public void onMessage(Message message) {
if (message instanceof TextMessage) {
TextMessage textMessage = (TextMessage)message;
try {
System.out.println(textMessage.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else if (message instanceof ObjectMessage) {
ObjectMessage objectMessage=(ObjectMessage)message;
try {
Girl girl =(Girl) objectMessage.getObject();
System.out.println(girl.getName());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}else if (message instanceof BytesMessage) {
BytesMessage bytesMessage=(BytesMessage)message;
FileOutputStream out = null;
try {
out = new FileOutputStream("d:/aa.txt");
} catch (FileNotFoundException e2) {
e2.printStackTrace();
}
byte[] by = new byte[1024];
int len = 0 ;
try {
while((len = bytesMessage.readBytes(by))!= -1){
out.write(by,0,len);
}
} catch (Exception e1) {
e1.printStackTrace();
}
/*
* try { System.out.println(bytesMessage.readUTF()); } catch (JMSException e) {
* // TODO Auto-generated catch block e.printStackTrace(); }
*/
}else if (message instanceof MapMessage) {
MapMessage mapMessage = (MapMessage)message;
try {
System.out.println(mapMessage.getString("name"));
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
相關文章
- 非同步/回撥非同步
- Android和iOS開發中的非同步處理(二)——非同步任務的回撥AndroidiOS非同步
- C++屌屌的觀察者模式-同步回撥和非同步回撥C++模式非同步
- Dialog 的一些回撥處理
- java回撥函式-非同步回撥-簡明講解Java函式非同步
- WCF中的非同步回撥非同步
- C語言 非同步回撥C語言非同步
- Javascript的非同步和回撥JavaScript非同步
- 關於Yii2 微信支付回撥地址處理
- javascript非同步回撥是什麼JavaScript非同步
- 解析Promise解決非同步回撥Promise非同步
- 【設計模式】非同步阻塞、非同步回撥模式設計模式非同步
- jQuery:在一個回撥中處理多個請求jQuery
- Javascript回撥非同步操作示例教程JavaScript非同步
- Hystrix微服務容錯處理及回撥方法原始碼分析微服務原始碼
- 多執行緒應用–Http請求阻塞回撥處理執行緒HTTP
- 多執行緒應用--Http請求阻塞回撥處理執行緒HTTP
- iOS 如何優雅的處理“回撥地獄Callback hell”(一)iOS
- 回撥地獄-編寫非同步JavaScript指南非同步JavaScript
- 非同步與回撥的設計哲學非同步
- 深入淺出: Java回撥機制(非同步)Java非同步
- Java 非同步回撥機制例項解析Java非同步
- 在C++中使用libuv時對回撥的處理 (2)C++
- Camera開發系列之二 相機資料回撥處理
- C# 同步 非同步 回撥 狀態機 async await DemoC#非同步AI
- iOS如何優雅的處理“回撥地獄Callback hell”(二)——使用SwiftiOSSwift
- iOS如何優雅的處理“回撥地獄Callback hell”(一)——使用PromiseKitiOSPromise
- 用匿名內部類實現 Java 同步回撥Java
- arcgis api for js回撥函式如何等待同步APIJS函式
- Python 中的程式、執行緒、協程、同步、非同步、回撥Python執行緒非同步
- 微信小程式學習總結02:封裝api請求(處理非同步api回撥地獄的一種方案)微信小程式封裝API非同步
- [JS]回撥函式和回撥地獄JS函式
- Swift 中如何利用閉包實現非同步回撥?Swift非同步
- JS 非同步發展流程(回撥函式=>Async/await)JS非同步函式AI
- JavaScript 非同步操作裡的巢狀回撥函式JavaScript非同步巢狀函式
- 基於Guava API實現非同步通知和事件回撥GuavaAPI非同步事件
- ajax回撥函式執行順序帶來的同步非同步問題函式非同步
- 非同步處理方法非同步