ESB + Camel根据前一次调用的响应调用多个Web服务
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ESB + Camel根据前一次调用的响应调用多个Web服务相关的知识,希望对你有一定的参考价值。
我正在使用ESB和Camel为我的移动应用程序提供端点。从那里,我需要以这样的方式调用多个Web服务:前一个调用的响应确定是否应该调用下一个,并且需要将相同的请求参数传递给多个调用。
另外,我需要在数据库中保存这些响应。
我想知道使用Camel实现这个特定用例的最佳模式。
答案
有很多方法可以做到 - 只要想想你如何在纯Java中做这样的逻辑,然后将它移到Camel。从行动流程来看,没有区别。你有条件 - 你必须有IF或SWITCH操作。
- 直截了当的方式。在调用上一个服务之后,您在body中有一个响应属性,该属性是下一个调用的决策因素。因此,使用Camel“select-when-otherwise”结构(类似于Java“switch”语句)和“when”使用任何可用的方法来检查来自body的条件(即“simple”,“xpath”,“xquery”等。 )
- 如果识别下一个调用的逻辑更复杂 - 创建自定义处理器将识别下一个调用,设置特殊交换属性然后转到相同的“何时选择”块对于该情况作为示例,您可以使用< “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服务的主要内容,如果未能解决你的问题,请参考以下文章
如何从 wso2 ESB 中的另一个服务调用服务(或一个服务的参数)
集成框架Spring Integration, Mule ESB or Apache Camel比较