最近几天一直纠结于监听模式。在监听模式下遇到了两个问题。
1.消息接收者不关闭竟然收不到消息。
2.在监听模式下,每次只收一条消息,即使设定了监听,也是只收到一条消息
今天就针对这两个问题作出解答。
对于第一个问题,是这样的。在个别时候能收到消息。但是一般情况下都收不到消息。这个的表象是不关闭的问题,实际上,我认为是因为执行了关闭的方法,这时候使得监听来得及读消息,所以才能读出来一条消息。和关闭不关闭没有关系。测试代码如下:
我把关闭的代码去掉,换成等待5秒钟:
- JMSConsumer consumer = new JMSConsumer();
- consumer.openConsumer("localhost", 1414, "QMTest", "testQueue", false);
- ((JMSConsumer) consumer).receiveMessage();
- Thread.currentThread().sleep(5000);
JMSConsumer consumer = new JMSConsumer();
consumer.openConsumer("localhost", 1414, "QMTest", "testQueue", false);
((JMSConsumer) consumer).receiveMessage();
Thread.currentThread().sleep(5000);
这样照旧能读出消息。
对于第二种问题,可以这样理解。因为源码中并没有使用线程,因此,一个j2se程序虽然加了监听,但是程序执行完毕了就完了。因此即使添加了相应也没有用。如果队列里有消息,也只是调用一次接收消息,下一条消息还没来得及接收程序就执行完毕了。这也解释了为什么我在receiveMessage方法中增加了延迟,这时候能收多条消息的原因。解决方式就是使用一个线程,让程序不停的跑。