У меня есть веб-приложение, где, когда пользователь отправляет запрос, мы отправляем JMS-сообщение в удаленную службу и затем ожидаем ответа. (Есть также асинхронные запросы, и у нас есть различные тонкости, настроенные для повтора сообщений и т.д., Поэтому мы предпочли бы использовать JMS вместо, скажем, HTTP)
В Как мне реализовать ответ запроса с JMS?, ActiveMQ, похоже, препятствует идее временных или временных запросов на запрос или временных потребителей селекторов на JMSCorrelationID, из-за накладных расходов, связанных с их разворачиванием.
Однако, если я использую объединенные потребители для ответов, как мне отправить от потребителя ответа обратно в исходный запрашивающий поток?
Я, безусловно, мог бы написать свою собственную потокобезопасную обратную обработку-регистрацию/отправку, но я ненавижу писать код, который, как я подозреваю, уже написан кем-то, кто знает лучше, чем я.
Эта страница ActiveMQ рекомендует Lingo, которая не обновлялась с 2006 года, и Camel Spring Remoting, который был предан моей команде за ее многочисленные ошибки.
Есть ли лучшее решение в виде библиотеки, реализующей этот шаблон, или в виде другого шаблона для имитации синхронного запроса-ответа по JMS?
Связанный вопрос SO:
- Является ли хорошей практикой использовать временную очередь JMS для синхронного использования?, которая предполагает, что поворот потребителя с помощью селектора JMSCorrelationID на самом деле является низким, что противоречит тому, что говорит документация ActiveMQ. Кто прав?