JMS调用IBM MQ监听模式

本文探讨了在监听模式下遇到的消息接收问题,包括消息接收者未关闭导致无法接收消息的情况,以及每次只能接收一条消息的问题。通过分析,发现这些问题与程序执行完毕即停止有关,并提出了解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近几天一直纠结于监听模式。在监听模式下遇到了两个问题。

1.消息接收者不关闭竟然收不到消息。

2.在监听模式下,每次只收一条消息,即使设定了监听,也是只收到一条消息

 

今天就针对这两个问题作出解答。

对于第一个问题,是这样的。在个别时候能收到消息。但是一般情况下都收不到消息。这个的表象是不关闭的问题,实际上,我认为是因为执行了关闭的方法,这时候使得监听来得及读消息,所以才能读出来一条消息。和关闭不关闭没有关系。测试代码如下:

我把关闭的代码去掉,换成等待5秒钟:

Java代码 复制代码  收藏代码
  1. JMSConsumer consumer = new JMSConsumer();   
  2. consumer.openConsumer("localhost"1414"QMTest""testQueue"false);   
  3. ((JMSConsumer) consumer).receiveMessage();   
  4. Thread.currentThread().sleep(5000);  
		JMSConsumer consumer = new JMSConsumer();
		consumer.openConsumer("localhost", 1414, "QMTest", "testQueue", false);
		((JMSConsumer) consumer).receiveMessage();
		Thread.currentThread().sleep(5000);

 这样照旧能读出消息。

 

对于第二种问题,可以这样理解。因为源码中并没有使用线程,因此,一个j2se程序虽然加了监听,但是程序执行完毕了就完了。因此即使添加了相应也没有用。如果队列里有消息,也只是调用一次接收消息,下一条消息还没来得及接收程序就执行完毕了。这也解释了为什么我在receiveMessage方法中增加了延迟,这时候能收多条消息的原因。解决方式就是使用一个线程,让程序不停的跑。

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值