对Splitter,服务激活器和标头的建议

时间:2014-10-07 17:15:44

标签: spring-integration

我正在寻找如何处理案件的方向:

我有一个顶级的jaxb Request对象,它可能包含exisisting sessionID属性,或者我需要生成一个。然后,该对象包含要逐个执行的子操作。所以我会在它之后使用分离器。我希望将sessionID值作为带有子操作的后续消息的标题。

在之前的项目中,我首先将请求发送到“会话服务激活器”,然后将其发送到拆分器以生成子操作列表(继承了标头)。这可以在这里工作。 问题:还有另一种方法可以解决这个问题吗?

假设我们有一个操作列表,在第一个操作之后,我想将第一个的结果传递给后续的,如何构造它?

感谢。

[UPDATE] 这是我必须处理的简单层次结构:


RootRequest(会话)

-SubOperation
  - 子操作
...

以下是我实施它的方式:

...
<int:chain input-channel="rootRequestChannel"
    output-channel="operationSplitterChannel">
    <!-- Process top level request-->
    <int:service-activator id="rootRequestHandler"
        method="process" ref="rootOperationHandler">
    </int:service-activator>
    <!-- Put session id in header -->
    <int:header-enricher>
        <int:header
            name="#{T(ServicesConstants).SESSION_ID}"
            expression="payload.result.session" />
    </int:header-enricher>
</int:chain>

<int:splitter input-channel="operationSplitterChannel"
    ref="requestSplitter" output-channel="operationFilterChannel" />

<!-- Route the Result of Root Request to aggregator, the rest for processing to subOperataionHandler. -->
<int:filter input-channel="operationFilterChannel" ref="operationFilter"
    output-channel="subOperataionHandlerChannel" discard-channel="operationResponseOutputChannel" />

<int:service-activator id="subOperataionHandler"
    input-channel="subOperataionHandlerChannel" output-channel="operationResponseOutputChannel"
    method="process" ref="subOperationHandler">
</int:service-activator>

<int:aggregator input-channel="operationResponseOutputChannel"
    output-channel="primaryResponseChannel" method="aggregate"
    ref="responseAggregator">
</int:aggregator>
...

1 个答案:

答案 0 :(得分:0)

在这两种情况下,请使用<header-enricher/>

首先,在分离器之前;所有拆分消息都将继承所有丰富的标题。

类似地,您可以操纵有效负载和/或标头以向下游元素提供您想要的任何内容。