【发布时间】:2018-10-04 05:26:46
【问题描述】:
我正在使用 ESB 和 Camel 为我的移动应用程序提供端点。从那里,我需要调用多个 Web 服务,以使上一个调用的响应确定是否应该调用下一个,并且需要将相同的请求参数传递给多个调用。
此外,我需要将这些响应保存在数据库中。
我想知道我们可以使用 Camel 实现这个特定用例的最佳模式。
【问题讨论】:
标签: apache-camel esb apache-servicemix
我正在使用 ESB 和 Camel 为我的移动应用程序提供端点。从那里,我需要调用多个 Web 服务,以使上一个调用的响应确定是否应该调用下一个,并且需要将相同的请求参数传递给多个调用。
此外,我需要将这些响应保存在数据库中。
我想知道我们可以使用 Camel 实现这个特定用例的最佳模式。
【问题讨论】:
标签: apache-camel esb apache-servicemix
有很多方法可以做到这一点 - 想想你想如何在纯 Java 中执行诸如示例之类的逻辑,然后将其移至 Camel。从动作流的角度来看,没有区别。你有条件 - 你必须有 IF 或 SWITCH 操作就是这样。
直截了当。 调用上一个服务后,您会在正文中有一个响应,该属性是下一次调用的决定因素。因此,使用 Camel “choice-when-otherwise” 结构(类似于 Java “switch” 语句)并在 “when” 中使用任何可用的方法从主体检查条件(即“simple”、“xpath”、“xquery”等)。 )
如果识别下一个呼叫的逻辑更复杂 - 创建您的自定义处理器来识别下一个呼叫,设置特殊的交换属性,然后转到相同的“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>
等等……
【讨论】: