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

问题描述 投票:-1回答:1

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

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

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

apache-camel esb apache-servicemix
1个回答
1
投票

有很多方法可以做到 - 只要想想你如何在纯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>

等等...

© www.soinside.com 2019 - 2024. All rights reserved.