ESB + Camel根据前一次调用的响应调用多个Web服务

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESB + Camel根据前一次调用的响应调用多个Web服务相关的知识,希望对你有一定的参考价值。

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

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

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

答案

有很多方法可以做到 - 只要想想你如何在纯Java中做这样的逻辑,然后将它移到Camel。从行动流程来看,没有区别。你有条件 - 你必须有IF或SWITCH操作。

  1. 直截了当的方式。在调用上一个服务之后,您在body中有一个响应属性,该属性是下一个调用的决策因素。因此,使用Camel“select-when-otherwise”结构(类似于Java“switch”语句)和“when”使用任何可用的方法来检查来自body的条件(即“simple”,“xpath”,“xquery”等。 )
  2. 如果识别下一个调用的逻辑更复杂 - 创建自定义处理器将识别下一个调用,设置特殊交换属性然后转到相同的“何时选择”块对于该情况作为示例,您可以使用< “previous-result”,“next-call”>或者按照您的意愿去做。

你的路线看起来像(我用春天):

<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>

等等...

以上是关于ESB + Camel根据前一次调用的响应调用多个Web服务的主要内容,如果未能解决你的问题,请参考以下文章

我可以使用 Apache Camel 作为 ESB 吗?

如何从 wso2 ESB 中的另一个服务调用服务(或一个服务的参数)

WSO2 ESB调用SOAP端点无法执行操作

集成框架Spring Integration, Mule ESB or Apache Camel比较

如何正确配置此WSO2计划任务以执行简单的REST服务调用?

使用 Camel 的 REST 服务调用需要首先调用身份验证 api