У меня есть клиент в java, который отправляет сообщение jms в очередь («queue-request»). Сообщение содержит свойство int («id»), содержащее уникальный идентификатор клиента. Сообщение обрабатывается и помещается в другую очередь («queue-reply»). Как клиент может ждать, пока сообщение с его идентификатором окажется в очереди, а затем прочитайте его. Я попытался использовать прослушиватель и реализовать onMessage, но как я могу прекратить прослушивание, когда сообщение получено?читать сообщение jms из очереди с помощью selector
ответ
JMS синхронный можно использовать, используя JMSReplyTo. Создайте очередь очереди при отправке оригинального сообщения с тем же сеансом. Начало Слушайте очередь темпа и установите исходное сообщение JMSReplyTo TmpQueue.
Использование TempQueue Receiver.receive(), чтобы сделать ожидание нити (синхронно)
Полный пример кода можно найти в
В JMS необходимо указать слушателя для очереди так что если сообщение отправлено, то конкретный прослушиватель выбирается для приема сообщения. Весной вы можете указать слушателя в конфигурационном файле боб, как пример:
<bean id="myListener" class="mypackage.MyMessageListener" />
<bean id="queueBean" class="org.apache.activemq.command.ActiveMQTopic">
<constructor-arg value="Queue-Request"/>
</bean>
<bean id="myListenerContainer" class="org.springframework.jms.listener.DefaultMessageListenerContainer">
<property name="connectionFactory" ref="connectionFactoryBean" />
<property name="destination" ref="queueBean" />
<property name="messageListener" ref="myListener" />
</bean>
Тогда вы можете написать класс MyMessageListener
реализовать интерфейс MessageListener
:
public class MyMessageListener implements MessageListener {
public void onMessage(Message message) {
//handle message here ...
}
}
Это гарантирует, что MyMessageListener
будет получить сообщение, отправленное из очереди. Обратите внимание, что Queue - p2p, поэтому, если сообщение получено MyMessageListener
, оно не будет получено другими слушателями, которые не подписываются на эту очередь.
- 1. Потребляйте сообщение из очереди JMS
- 2. Как читать из очереди JMS WebLogic с помощью MQ Explorer?
- 3. JMS-сообщение не удалось получить из очереди
- 4. Как удалить сообщение из очереди JMS
- 5. Сообщение очереди JMS получает заказ
- 6. JMS - Не удается получить сообщение из очереди. Случается с перерывами
- 7. сообщение jms не перемещение очереди в websphere
- 8. JMS Selector vs. Individual Queues
- 9. Опубликовать сообщение в удаленной очереди JMS с помощью JBoss
- 10. Как читать статистику очереди jms программно
- 11. Как читать объект ArrayList <T> из очереди JMS?
- 12. Потребляйте сообщения из очереди JMS с помощью многопоточности
- 13. Отправка мыло сообщение в очереди JMS
- 14. Как найти конкретное сообщение в очереди JMS
- 15. Задачи в очереди с помощью JMS
- 16. WSO2 ESB Proxy - JMS Message Selector
- 17. прочитанное сообщение из очереди/темы в mule
- 18. Как использовать выражение Mule в JMS: selector
- 19. Можно ли использовать одно сообщение из очереди JMS?
- 20. Camel Spring JMS Selector
- 21. Ошибка при получении сообщений из очереди JMS
- 22. JMS очереди Работа с Grails
- 23. JMS Message Selector не работает
- 24. JMS - Redelivery поток в очереди
- 25. JMS - Отправить сообщение sychronously из сообщений компонента
- 26. функциональное тестирование очереди сообщений JMS с помощью JMeter
- 27. JMS + WildFly 8.2.0 - Чтение из очереди удаленных jms
- 28. Пример опроса очереди JMS
- 29. JMS Невозможно использовать сообщения из очереди Oracle, используя spring/jms
- 30. потребляя сообщение из очереди через яровую интеграцию
и как это решение будет выглядеть без временных очередей, но только на том, что слушают все клиенты? – benst
, так что я ищу, как асинхронно вытащить сообщение, предназначенное для клиента из одной большой очереди. Но это отлично работает для синхронного обмена сообщениями. проголосовали за победу – benst
JMS разработан специально для Asyc, он не обеспечивает синхронизацию как встроенную функцию. Вы можете выполнить sycn с помощью JMSReplyTo. Если вы используете назначение в качестве очереди, которое прослушивается n номером клиента, тогда сообщение не будет доставлено всем слушателем очереди. Поэтому для JMSReplyTo вам нужно использовать только «тему». И в клиенте используйте подписчика для получения сообщения и проверки идентификатора. Некоторая вещь как Хотя (true) { Сообщение сообщение = .. получать Сообщение из темы using .receive() Если message.getText(). Equals (id) { Break; } } – Mani