具有多个Web服务调用的Enricher模式

时间:2014-06-17 16:05:50

标签: spring-integration

如何在使用更丰富的模式时使用过滤或从链返回

这是我的情景 我正在使用更丰富的模式从请求通道中检索数据,然后用于丰富有效负载。 请求通道将调用multipe webservices来检索数据。仅当第一个Web服务具有有效数据时才需要调用第二个Web服务。如果不是,我需要回到浓缩器。 当过滤器发生时,我得到这个异常org.springframework.integration.handler.ReplyRequiredException:没有处理程序产生的回复

我的信息流是否正确或需要添加其他内容?

    <si:enricher id="enricher" input-channel="channelone"
request-channel="retrieveDataChannel" output-channel="outputChannel" >
    <si:property name="amount"    expression="payload.amount"/>

</si:enricher>


<si:chain id="dataChain" input-channel="retrieveDataChannel"  >
    <si:header-enricher >
        <si:header name="Content-Type" value="application/json" />
    </si:header-enricher>   


    <si-http:outbound-gateway id="Gateway1" 
                       url="http://$webservice{host}"                                               
                       http-method="POST" 
                       rest-template="restTemplate"
                       expected-response-type="com.xxx.response.Response1">
    </si-http:outbound-gateway>     

    <si:filter expression="payload.amount lt 30"  />



    <si-http:outbound-gateway id="Gateway2" 
                       url="http://$webservice{host}"                                               
                       http-method="POST" 
                       rest-template="restTemplate"
                       expected-response-type="com.xxx.response.AmountResponse">
    </si-http:outbound-gateway>         


</si:chain> 

1 个答案:

答案 0 :(得分:0)

如果您处于请求/回复流程中,则无法在链中添加<filter/>;富人会永远等待回复。

最简单的方法是将第二个网关移出链并使链的最后一个组件成为<router/>并在数据良好时路由到网关,并返回一些错误处理服务否则会出现错误结果。