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方法中增加了延迟,这时候能收多条消息的原因。解决方式就是使用一个线程,让程序不停的跑。

垃圾代码见附件。

猜你喜欢

转载自qiaokeli.iteye.com/blog/1782656
今日推荐