Обобщить http: исходящий-ответный канал шлюза - PullRequest
0 голосов
/ 20 августа 2011

Учитывая шлюз, который обрабатывает сервисные вызовы для ws.Моя цель - предоставить http:outbound-gateway's reply-channel с использованием header-enricher, так как я буду добавлять несколько методов к gateway, и я хотел бы использовать только 1 http:outbound-gateway

. В настоящее время я могу получить ответдо groovy script (2) НО, похоже, он не хочет возвращать результаты фактическому методу, вызывающему сервис

. Любая помощь будет принята.Спасибо!

<gateway id="registryService" service-interface="RegistryService">
<method name="create" request-channel="create-request-channel"
        reply-channel="create-reply-channel" />
</gateway>

<chain input-channel="create-request-channel" output-channel="create-request-fulfillment-channel">
 <transformer>
   // groovy script that contains the method to be called in the ws (1)
 </transformer>
 <object-to-json-transformer/>
 <header-enricher>
   <reply-channel overwrite="true" ref="create-reply-fulfillment-channel" />
 </header-enricher>
</chain>

<http:outbound-gateway request-channel="create-request-fulfillment-channel"
                       extract-request-payload="true"
                       expected-response-type="java.lang.String"
                       url="http://localhost:4567" http-method="POST" />

<chain input-channel="create-reply-fulfillment-channel"
       output-channel="create-reply-channel">
       <json-to-object-transformer type="JsonRpcResponse"/>
       <transformer>
           //groovy script to manipulate response (2)
       </transformer>
</chain>

1 Ответ

1 голос
/ 21 августа 2011

Выполните следующие действия:

Каждый метод вашего шлюза должен обогащать сообщение некоторым уникальным значением заголовка «маршрутизации»:

<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, и я использую это сам - доказано, что работает;)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...