消息监听器没有收到JMS MockTopic消息?

时间:2011-07-20 21:34:42

标签: java jms mockrunner

我正在尝试编写一个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 的限制吗?

1 个答案:

答案 0 :(得分:0)

我不完全清楚这是否是MockTopic问题,但就标准JMS而言,除非是持久订阅,否则您不会期望启动的侦听器接收在启动之前发布的消息。持久性既不存在也不存在。