Существует одна очередь запросов, и очереди ответов создаются экземплярами клиентского сервера и привязаны к каждому экземпляру, а не к временным очередям.jms dynamic destination from original jmsReplyTo
В случае использования необходимо получить входящее сообщение jms, а затем отправить это сообщение в асинхронный процесс. После получения сообщения об асинхронном ответе от службы мне нужно принять эти результаты и ответить обратно на jmsReplyTo исходного сообщения. Шлюз Jms не будет работать в этом случае AFAIK>
Я использую адаптер канала с сообщением, управляемый сообщением, для сообщения с серией каналов и активаторов услуг для обработки исходящих вызовов процессов и асинхронных ответов. Я пытаюсь использовать DynamicDestinationResolver безрезультатно. Кроме того, я попытался установить адрес исходящего адресата программно, но не смог найти хороший способ сделать это.
Это похоже на общий шаблон, но я не смог найти хороший пример для полностью отключенного ответа на запрос асинхронного запроса. Disconnected означает, что обычный ответ на запрос async jms, похоже, не соответствует потребностям.
Контекст Config:
<!-- Input from Amq -->
<amq:queue id="requestQueue" physicalName="${request.queue}" />
<int-jms:message-driven-channel-adapter id="jmsIn"
connection-factory="jmsConnectionFactory"
destination="requestQueue"
channel="queueRequestChannel" concurrent-consumers="5" />
<int:channel id="queueRequestChannel" />
<int:service-activator input-channel="queueRequestChannel" ref="switchMessageHandler" method="processSwitchMessage"
output-channel="cardNetworkOutChannel"/>
<!-- Output to Card Network-->
<int:channel id="cardNetworkOutChannel" />
<!--<int:service-activator input-channel="cardNetworkOutChannel" ref="cardNetworkHandler" method="send8583Message" />-->
<!-- Simply used to mock the card network by transforming a SwithMessage to a SwitchMessageResponse * Not needed for target solution -->
<int:transformer id="requestResponseTransformer" ref="nettyCardNetworkClientMock" input-channel="cardNetworkOutChannel"
method="process" output-channel="cardNetworkInChannel"/>
<!-- Input from Card Network -->
<int:channel id="cardNetworkInChannel" />
<int:service-activator input-channel="cardNetworkInChannel" ref="switchMessageHandler" method="sendSwitchMessage"
output-channel="queueReplyChannel"/>
<int:channel id="queueReplyChannel"/>
<int-jms:outbound-channel-adapter
destination-resolver="simpleDestinationResolver" connection-factory="jmsConnectionFactory"
channel="queueReplyChannel" destination-expression="headers.jms_replyTo" />
Извините, но ваш вопрос непонятен. Всегда старайтесь быть очень конкретным ... например. «.. шлюз не сработает ...». Сторона клиента? или на стороне сервера? Вы должны иметь возможность использовать исходящие и управляемые сообщениями адаптеры с обеих сторон и использовать «destination-expression» в исходящих адаптерах. –
Извините, Гэри. Это компонент на стороне сервера с точки зрения ActiveMQ. Приложение потребляет сообщения из фиксированной очереди. Затем он обменивается данными через TCP через определенный протокол и получает ответы через TCP. Эти ответы затем должны быть отправлены обратно в ActiveMQ, ссылаясь на исходный адрес jmsReplyTo сообщения входящего ActiveMQ. Во время разработки этот серверный компонент не знает, что будет отвечать на очереди. Клиенты (ActiveMQ) для этого приложения создают уникальную для клиента очередь ответов. –
ОК, но вам нужно точно объяснить, в чем проблема. –