`
qiaokeli
  • 浏览: 24141 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

JMS调用IBM MQ监听模式

 
阅读更多

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

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

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

 

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

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

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

		JMSConsumer consumer = new JMSConsumer();
		consumer.openConsumer("localhost", 1414, "QMTest", "testQueue", false);
		((JMSConsumer) consumer).receiveMessage();
		Thread.currentThread().sleep(5000);

 这样照旧能读出消息。

 

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

 

垃圾代码见附件。

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics