使用http出站网关响应的Spring集成作为下一个http请求的值条件

时间:2016-04-30 23:41:06

标签: spring spring-integration

我有拆分消息,拆分一条原始消息成为3部分。我需要通过http出站网关顺序发送它。例如,步骤将是这样的。

  1. 一条名为A的消息分为(A1.request,A2.request,A3.request)频道
  2. A1.request发送到Rest Api服务器并返回响应A1.response channel
  3. 对条件值使用A1.response通道,如果返回成功,则将A2.request发送到不同的URL。
  4. 然后使用A2.response频道作为条件值,如果返回成功,则将A3.request发送到不同的URL。
  5. 收集所有回复频道(A1.response,A2.response,A3.response)以构建下一步的条件输出。
  6. 如何实现这一目标的最佳途径?提前致谢。

1 个答案:

答案 0 :(得分:0)

可以使用一系列组件来完成

  • 将3个分裂聚合成一个消息,其中A1.request作为有效载荷,其他请求在头部,然后在第一个网关,路由器和变换器之后将A2.request移动到有效载荷等,< / LI>

但是流程可能会有点复杂,难以调试和维护。

将业务流程代码放在一个简单的java类中,并通过messaging gateway为每个http网关调用每个服务可能会更容易。

即。将消息A发送到<service-activator/>,其中注入了3个网关。

拆分,调用gateway1(将消息发送到http1)检查结果,......,然后聚合并返回最终结果。

修改

这就是我的意思......

<int:chain ...>
    <int:splitter ... />
    <int:aggregator />
    <int:header-enricher>
        <int:header name="A2" expression="payload.get(1)" />
        <int:header name="A3" expression="payload.get(2)" />
    </int:header-enricher>
    <int:transformer expression="payload.get(0)" />
</int:chain>

然后,调用第一个网关,如果成功,将结果保存在标题中并使用

<transformer ... expression=headers['A2'] />

发送到第二个http等。

要测试成功/失败,您可以使用路由器,或者使用简单的<filter/>并将失败转到丢弃渠道。