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 的时候,无非就是在网上找些例子抄抄,实现代码如下:

<span style="white-space:pre">		</span>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:

<span style="white-space:pre">		</span>boolean flag = true;
		while(flag){
			Thread.sleep(1000 * 100);
		}
这样你的main 或者@Test 就会被一直“挂起”,MessageListener  也就可以正常使用了。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值