activemq 开启监听_ActiveMQ 消息监听 MessageListener 的使用
剛學(xué) ActiveMQ, 最開(kāi)始搭建環(huán)境的時(shí)候引入的jar 包,幾個(gè)核心的jar jms.jar,?httpcore.jar ,?httpclient.jar,?activemq-all.jar 準(zhǔn)備完畢,啟動(dòng)junit 發(fā)現(xiàn)有好些個(gè)class 找不到,比如 PoolingClientConnectionManager 等,老是報(bào) classnotfound 的錯(cuò)誤,打開(kāi)源代碼一看,原來(lái)是引入的版本過(guò)低,將其版本升級(jí)到 4.2.1 就解決問(wèn)題了。
ActiveMQ 最關(guān)心的就是消息的發(fā)送與接收了,消息發(fā)送不是問(wèn)題,主要是消息接收,或者說(shuō)是讓消息不停地接收。
接收消息有兩種方式,
方式一:
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...");
這樣就可以不間斷地接收消息,當(dāng)向客戶(hù)端發(fā)送一個(gè) “stop” 的時(shí)候,客戶(hù)端進(jìn)程將會(huì)結(jié)束。
方法二:
使用?MessageListener,開(kāi)始學(xué)習(xí)MessageListener 的時(shí)候,無(wú)非就是在網(wǎng)上找些例子抄抄,實(shí)現(xiàn)代碼如下:
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();
}
}
});
這是網(wǎng)上出現(xiàn)最多的helloworld 級(jí)別的?MessageListener ?使用方式,但我把代碼抄完了之后一運(yùn)行,發(fā)現(xiàn)什么都沒(méi)有發(fā)生,在ActiveMQ 控制臺(tái)上也沒(méi)有看到消息被接收了。
原來(lái),網(wǎng)上抄了這段代碼并不是一段完整的代碼,
首先理解下“監(jiān)聽(tīng)”, 上面的這段程序雖然注冊(cè)了監(jiān)聽(tīng),但監(jiān)聽(tīng)也有一個(gè)生命周期,在main方法里面或者 @Test 里面調(diào)用了之后,程序會(huì)立馬接收,監(jiān)聽(tīng)的生命周期也將結(jié)束,不會(huì)再起作用。
那么怎么解決呢?那就要讓這段程序不被結(jié)束,then how? see the code as below:
boolean flag = true;
while(flag){
Thread.sleep(1000 * 100);
}這樣你的main 或者@Test 就會(huì)被一直“掛起”,MessageListener ?也就可以正常使用了。
總結(jié)
以上是生活随笔為你收集整理的activemq 开启监听_ActiveMQ 消息监听 MessageListener 的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: chrome 禁用https限制http
- 下一篇: 1 字节的 utf-8 序列的字节 1