没有Aggreagation的Spring集成并行处理

时间:2015-07-04 19:20:59

标签: java spring message spring-integration duplicate-data

我找不到足够/清晰的文档。

我收到了来自chain processing的消息。一旦频道收到消息,我想在有条件的基础上复制消息。

简单流程:

<int-http:inbound-gateway request-channel="httpRequestChannel" reply-channel="httpResponseChannel" supported-methods="POST" 
    path="/doSomething" request-payload-type="com.xxx.Request" >
</int-http:inbound-gateway>

<int:chain id="msgChain" input-channel="httpRequestChannel" output-channel="processChannel">
    <int:claim-check-in message-store="messageStore"/>
    //do something
</int:chain>

<int:chain id="msgChain2" input-channel="processChannel" output-channel="parallelChannel">
    <int:claim-check-in message-store="messageStore"/>
    //do something
</int:chain>

<int:chain id="parallelChainId" input-channel="parallelChannel" output-channel="httpResponseChannel">
    <int:claim-check-in message-store="messageStore"/>
    if(payload infrom3rdparty property set i.e. payload.infrom3rdparty == true){
           send this message to //3party Channel
    }
    //do something
</int:chain>

我无法应用filter,因为丢弃邮件会转到if else之类的其他渠道。但我需要if重复的消息到另一个频道

1 个答案:

答案 0 :(得分:4)

也许您可以尝试使用包含2个订阅者的发布 - 订阅频道: - 遵循的标准流程 - 复制流程

在复制流程中,您可以使用过滤器来选择是否应发送邮件。它可能是这样的:

<int:publish-subscribe-channel id="parallelChannel"/>

<int:chain id="standardFlowChain" input-channel="parallelChannel" output-channel="httpResponseChannel">
    <int:claim-check-in message-store="messageStore"/>
    //follow the standard flow
</int:chain>
<int:chain id="thirdPartyFlowChain" input-channel="parallelChannel" output-channel="thirdPartyOutputChannel">
    <int:claim-check-in message-store="messageStore"/>
    <int:filter expression="payload.infrom3rdparty == true"/>
</int:chain>