Сообщение JMS MockTopic не обнаружено слушателем сообщения?
Я пытаюсь написать тест jUnit, чтобы показать, что функция start () подписчика JMS запускает прослушиватель сообщений для темы (и что сообщения не использовались до вызова 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);
но это не помогло.
Фактически запущенная программа, кажется, указывает, что сообщения, в настоящее время находящиеся в теме, обрабатываются при запуске (). Кто-нибудь знает, почему сообщения, находящиеся в настоящее время на MockTopic, могут не обрабатываться при запуске ()? Это ограничение MockTopic?
1 ответ
Мне не совсем ясно, если это проблема MockTopic, но в отношении стандартного JMS вы не ожидаете, что запущенный слушатель получит сообщения, опубликованные до его запуска, если только это не была долговременная подписка. Настойчивость не здесь и не там.