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++模式非同步
- java回撥函式-非同步回撥-簡明講解Java函式非同步
- javascript非同步回撥是什麼JavaScript非同步
- 解析Promise解決非同步回撥Promise非同步
- 關於Yii2 微信支付回撥地址處理
- 【設計模式】非同步阻塞、非同步回撥模式設計模式非同步
- Javascript回撥非同步操作示例教程JavaScript非同步
- 多執行緒應用–Http請求阻塞回撥處理執行緒HTTP
- Camera開發系列之二 相機資料回撥處理
- 多執行緒應用--Http請求阻塞回撥處理執行緒HTTP
- Hystrix微服務容錯處理及回撥方法原始碼分析微服務原始碼
- 在C++中使用libuv時對回撥的處理 (2)C++
- C# 同步 非同步 回撥 狀態機 async await DemoC#非同步AI
- 回撥地獄-編寫非同步JavaScript指南非同步JavaScript
- 用匿名內部類實現 Java 同步回撥Java
- arcgis api for js回撥函式如何等待同步APIJS函式
- JS 非同步發展流程(回撥函式=>Async/await)JS非同步函式AI
- Swift 中如何利用閉包實現非同步回撥?Swift非同步
- [JS]回撥函式和回撥地獄JS函式
- 微信小程式學習總結02:封裝api請求(處理非同步api回撥地獄的一種方案)微信小程式封裝API非同步
- 回撥方法
- Netty之非阻塞處理Netty
- 非同步流程處理非同步
- 非同步處理方法非同步
- JavaScript | 非同步處理JavaScript非同步
- jQuery原始碼剖析(四) - Deferred非同步回撥解決方案jQuery原始碼非同步
- 基於Guava API實現非同步通知和事件回撥GuavaAPI非同步事件
- JavaScript 非同步操作裡的巢狀回撥函式JavaScript非同步巢狀函式
- Activity生命週期回撥是如何被回撥的?
- js 回撥 callbackJS
- 回撥函式函式
- 回撥地獄
- C++回撥C++
- 支付寶PC端單筆支付同步回撥session失效問題Session
- 併發程式設計 —— 自己寫一個非同步回撥 API程式設計非同步API
- js中非同步處理JS非同步