activemq 开启监听_ActiveMQ 消息监听 MessageListener 的使用
剛學 ActiveMQ, 最開始搭建環境的時候引入的jar 包,幾個核心的jar jms.jar,?httpcore.jar ,?httpclient.jar,?activemq-all.jar 準備完畢,啟動junit 發現有好些個class 找不到,比如 PoolingClientConnectionManager 等,老是報 classnotfound 的錯誤,打開源代碼一看,原來是引入的版本過低,將其版本升級到 4.2.1 就解決問題了。
ActiveMQ 最關心的就是消息的發送與接收了,消息發送不是問題,主要是消息接收,或者說是讓消息不停地接收。
接收消息有兩種方式,
方式一:
while(flag){
TextMessage message = (TextMessage)consumer.receive(1000 * 100);
if(message != null){
log.info("receive message : "+ message.getText());
if("stop".equals( message.getText())){
flag = false;
}
}
}
log.info("receiver server stop...");
這樣就可以不間斷地接收消息,當向客戶端發送一個 “stop” 的時候,客戶端進程將會結束。
方法二:
使用?MessageListener,開始學習MessageListener 的時候,無非就是在網上找些例子抄抄,實現代碼如下:
consumer.setMessageListener(new MessageListener(){
@Override
public void onMessage(Message msg) {
// TODO Auto-generated method stub
TextMessage message = (TextMessage)msg;
try {
log.info("receive message : "+ message.getText());
} catch (JMSException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
});
這是網上出現最多的helloworld 級別的?MessageListener ?使用方式,但我把代碼抄完了之后一運行,發現什么都沒有發生,在ActiveMQ 控制臺上也沒有看到消息被接收了。
原來,網上抄了這段代碼并不是一段完整的代碼,
首先理解下“監聽”, 上面的這段程序雖然注冊了監聽,但監聽也有一個生命周期,在main方法里面或者 @Test 里面調用了之后,程序會立馬接收,監聽的生命周期也將結束,不會再起作用。
那么怎么解決呢?那就要讓這段程序不被結束,then how? see the code as below:
boolean flag = true;
while(flag){
Thread.sleep(1000 * 100);
}這樣你的main 或者@Test 就會被一直“掛起”,MessageListener ?也就可以正常使用了。
總結
以上是生活随笔為你收集整理的activemq 开启监听_ActiveMQ 消息监听 MessageListener 的使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: chrome 禁用https限制http
- 下一篇: 1 字节的 utf-8 序列的字节 1