实现网关导致消息流中出现问题

时间:2015-12-08 07:49:15

标签: spring-integration

我有一个场景,我收到一条消息并使用Recipient-list-router将其路由到不同的消息通道。

<int:recipient-list-router input-channel="inputChannel1" 
    apply-sequence="true"   id="router1">
  <int:recipient channel="service1" />
  <int:recipient channel="service2" />
</int:recipient-list-router>

此聚合器用于聚合来自上述2个服务的响应,并将聚合输出重定向到其他某个通道以进行进一步处理。

<int:aggregator input-channel="aggregator1" output-channel="channel2" >
    <bean class="wsintg.service.AggregatorClass" /> 
</int:aggregator>

个别服务的代码如下所示:

 <!--service 1 code -->

<int:service-activator input-channel="service1" ref="service1Ref" />

    <int:gateway id="service1Ref" default-request-channel="success_channel" error-channel="error_channel" />

    <int:chain id="chainid1" input-channel="success_channel" output-channel="aggregator1">
        step 1 :xsl transformation 
        step 2 :call to a service using ws:outbound-gateway
            <int:service-activator id="sa1">
                <bean class="samplePkg.returnMessage"></bean>   <!--return message simply returns the message without doing anything -->
            </int:service-activator>    
    </int:chain>

    <int:chain id="chainid2" input-channel="error_channel" output-channel="aggregator1" >
                <int:service-activator>
                    <!-- some custom exception handling -->
                </int:service-activator>
    </int:chain>

    <!--service 2 code -->   same as service 1
  1. 问题:

    1. 如果我不在服务1和服务2中使用网关并只是进行转换,则代码可以正常运行。

    2. 但是,因为我需要使用error_channel进行一些错误处理,所以我将一个网关放在service1和service 2代码中。现在流了 服务1中的服务激活器停留后没有丢弃任何东西 例外。并且不会调用服务2流程。

1 个答案:

答案 0 :(得分:0)

您需要显示真实的配置,而不仅仅是评论;我们无法猜出您的应用程序是什么样的。

也就是说,您不能仅向聚合器发送错误消息,因为聚合信息位于failedMessage标头中,需要进行升级。

有关示例,请参阅error handling in this sample

与往常一样,调试此类情况的第一步是打开org.springframework.integration的DEBUG日志记录,并按照流程中的消息进行操作。

您通常可以通过这种方式确定问题。