JMS调用IBM MQ监听模式

来源:互联网 发布:整型变量的数据范围 编辑:程序博客网 时间:2024/04/30 19:54

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

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);  

 这样照旧能读出消息。

 

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