我正在尝试编写一个 jUnit 测试来显示JMS订阅者的start()函数启动了主题的消息侦听器(并且在调用start()之前没有使用消息)。
我遇到了一个问题,即在调用start()函数之前放置在主题上的消息在调用start()后不会被处理。调用start()后放置在主题上的消息将立即处理。
MockTopic topicWriter = getMockTopic(TOPIC);
// publish a message for the listener to pick up
MockObjectMessage objectMessage = new MockObjectMessage(message);
objectMessage.setBooleanProperty("Broadcast", true);
topicWriter.addMessage(objectMessage);
// the message doesn't get consumed because the subscriber has not been started
//...assert that the message is not processed... (**SUCCEEDS**)
// start the subscriber/listener
subscriber.start();
//...assert that the messages sitting on the topic get processed... (**FAILS**)
// publish a message for the listener to pick up
topicWriter.addMessage(objectMessage);
//...assert that the message gets processed... (**SUCCEEDS**)
虽然这表明监听器在start()之前没有运行,但启动消息监听器应该会导致当前在主题上的所有消息都被处理。
我试图通过添加以下内容来确保持久性不是原因:
objectMessage.setJMSDeliveryMode(DeliveryMode.PERSISTENT);
但这没有帮助。
实际运行程序似乎表明当前驻留在主题上的消息在start()上处理。有谁知道为什么当前MockTopic上的消息可能不会在start()得到处理?这是MockTopic的限制吗?