【问题标题】:ESB + Camel Calling multiple web services based on the response from the previous callESB + Camel 根据上一次调用的响应调用多个 Web 服务
【发布时间】:2018-10-04 05:26:46
【问题描述】:

我正在使用 ESB 和 Camel 为我的移动应用程序提供端点。从那里,我需要调用多个 Web 服务,以使上一个调用的响应确定是否应该调用下一个,并且需要将相同的请求参数传递给多个调用。

此外,我需要将这些响应保存在数据库中。

我想知道我们可以使用 Camel 实现这个特定用例的最佳模式。

【问题讨论】:

    标签: apache-camel esb apache-servicemix


    【解决方案1】:

    有很多方法可以做到这一点 - 想想你想如何在纯 Java 中执行诸如示例之类的逻辑,然后将其移至 Camel。从动作流的角度来看,没有区别。你有条件 - 你必须有 IF 或 SWITCH 操作就是这样。

    1. 直截了当。 调用上一个服务后,您会在正文中有一个响应,该属性是下一次调用的决定因素。因此,使用 Camel “choice-when-otherwise” 结构(类似于 Java “switch” 语句)并在 “when” 中使用任何可用的方法从主体检查条件(即“simple”、“xpath”、“xquery”等)。 )

    2. 如果识别下一个呼叫的逻辑更复杂 - 创建您的自定义处理器来识别下一个呼叫,设置特殊的交换属性,然后转到相同的“choice-when-otherwise”块 以这种情况为例,您可以使用 制作一些地图,或者按照您的意愿进行操作。

    你的路线可能看起来像(我使用 Spring):

    <cml:to uri="previous_uri"/>
    <cml:processor ref="my_selector"/> <!-- it sets Exchange property "next_call" based on result from previous -->
    <cml:choice>
        <cml:when>
           <cml:simple>${exchangeProperty.next_call} =="SERVICE1"/>
           <cml:to uri="next_service1_uri"/>
           ... process Service1 result logic ...
        </cml:when>
        <cml:when>
           <cml:simple>${exchangeProperty.next_call} =="SERVICE2"/>
           <cml:to uri="next_service2_uri"/>
           ... process Service2 result logic ...
        </cml:when>
    

    等等……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多