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  也就可以正常使用了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值