我正在尝试编写一个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 的限制吗?
答案 0 :(得分:0)
我不完全清楚这是否是MockTopic问题,但就标准JMS而言,除非是持久订阅,否则您不会期望启动的侦听器接收在启动之前发布的消息。持久性既不存在也不存在。