在上下文xml中对同一服务进行多次调用

时间:2016-02-15 20:34:56

标签: spring spring-integration

我有一个REST服务,我从我的spring上下文文件调用,根据收到的响应,我可以继续进行其余的处理,或者使用不同的uri_variable再次拨打同一个服务。 以下是我的上下文文件 -

<int:chain id="Search" input-channel="inputChannel" output-channel="channel1">

<int:header-enricher>
    <int:header name="accept" value="application/xml" overwrite="true"/>
    <int:header name="Authorization" method="getAuth" ref="Auth"/>
 </int:header-enricher>

    <int-xml:xpath-header-enricher>
        <int-xml:header name="medId" xpath-expression="/MedicineFamily/medicineId/text()" evaluation-type="STRING_RESULT" />
 </int-xml:xpath-header-enricher>

<int-http:outbound-gateway id="ServiceGateway" http-method="GET" reply-timeout="1000" 
    expected-response-type="java.lang.String" url="https://#{environment['dataservice.address']}:#{environment['dataservice.port']}/#{environment['dataservice.paths.medId']}"
    mapped-request-headers="accept,Authorization" mapped-response-headers="medId" error-handler="ErrorHandler">
    <int-http:uri-variable name="med_id" expression="headers['medId']"/>
 </int-http:outbound-gateway>

 <int:transformer  ref="PharmacyBean" method ="formMed"/>
</int:chain>

在这里,我使用带有uri变量的出站网关调用数据服务作为从另一个服务调用接收的medId。现在根据变换器中的服务和处理结果,我可能需要再次调用此服务,但这次使用不同的uri变量。

如何使用这个新的uri变量发送回另一个变量并再次调用此服务? 另外,如果我有多个medId被返回并且我想为每一个调用服务,我如何在循环中调用此服务? 谢谢!

1 个答案:

答案 0 :(得分:0)

在网关后添加路由器,并根据需要路由回网关。多个medId时,路由到分路器;如果需要在拆分器后重新组合结果,请使用聚合器。

在这种情况下,您可能会发现在splitter->http->aggregator流程中添加第二个网关更容易;否则路由器中的条件可能会变得复杂。