【问题标题】:Spring integration using http outbound gateway response as value condition for next http request使用 http 出站网关响应作为下一个 http 请求的值条件的 Spring 集成
【发布时间】:2016-08-25 23:28:57
【问题描述】:

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

  1. 一条名为 A 的消息被拆分为 (A1.request,A2.request,A3.request) 通道
  2. A1.request 发送到 Rest Api 服务器并返回响应 A1.response 通道
  3. 使用 A1.response 通道获取条件值,如果返回成功则将 A2.request 发送到不同的 url。
  4. 然后使用A2.response通道作为条件值,如果返回成功则将A3.request发送到不同的url。
  5. 收集所有回复通道(A1.response、A2.response、A3.response),为下一步构建条件输出。

如何实现这一目标的最佳方式?提前致谢。

【问题讨论】:

    标签: spring spring-integration


    【解决方案1】:

    可以用一系列组件来完成

    • 将 3 个拆分聚合为一条消息,其中 A1.request 作为有效负载,其他请求在标头中,然后在第一个网关、路由器和转换器之后将 A2.request 移动到有效负载等,等等,

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

    将编排代码放在一个简单的 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等

    要测试成功/失败,您可以使用路由器,或简单的&lt;filter/&gt;,失败进入丢弃通道。

    【讨论】:

    • 谢谢 Gary.. 我会尝试第一个选项。对于第二个选项(“将消息 A 发送到 ”)你能举个例子吗?以前我使用这种方式,但我仍然不明白如何控制 调用,有时该方法被多次调用,而其中的 http 客户端没有响应。问候。
    • 对于第一个选项,您的意思是将通道(A2.request,A3.Request)添加到标头丰富器中吗?怎么做。对不起,我是 SI 的新手。问候。
    • 谢谢@Garry Russell
    猜你喜欢
    • 1970-01-01
    • 2012-03-07
    • 1970-01-01
    • 1970-01-01
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多