Выполните следующие действия:
Каждый метод вашего шлюза должен обогащать сообщение некоторым уникальным значением заголовка «маршрутизации»:
<gateway id="registryService" service-interface="RegistryService">
<method name="create" request-channel="http-request-channel"
reply-channel="registryService-create-responseChannel">
<header name="routingHeader" value="registryService-create" />
</method>
</gateway>
А затем отправить сообщение прямо на исходящий шлюз:
<http:outbound-gateway request-channel="http-request-channel"
response-channel="http-response-channel"
extract-request-payload="true"
expected-response-type="java.lang.String"
url="http://localhost:4567" http-method="POST" />
Исходящий шлюз Http отправляет запрос на удаленный сервер, а затем пересылает ответ на http-response-channel
. К этому каналу присоединяется значение заголовка маршрутизатора, который на основании значения заголовка маршрутизации отправляет (маршрутизирует) сообщение в соответствующий канал:
<header-value-router input-channel="http-response-channel" header-name="routingHeader">
<mapping value="registryService-create" channel="registryService-create-responseChannel" />
<mapping value="someOtherService-otherMethod" channel="someOtherService-otherMethod-responseChannel" />
</header-value-router>
Конечно, вам не нужно отправлять его обратно непосредственно на шлюз - вы можете добавить дополнительную обработку между этими компонентами, и все время вы можете маршрутизировать сообщение на основе значения заголовка.
Это проще, чем хаки с Groovy, и я использую это сам - доказано, что работает;)