Apache camel ESB+;基于上一次调用的响应调用多个web服务

Apache camel ESB+;基于上一次调用的响应调用多个web服务,apache-camel,esb,apache-servicemix,Apache Camel,Esb,Apache Servicemix,我正在使用ESB和Camel为我的移动应用程序提供一个端点。在此基础上,我需要调用多个web服务,以便前一个调用的响应确定是否应该调用下一个,并且需要将相同的请求参数传递给多个调用 此外,我需要将这些响应保存在数据库中 我想知道我们可以使用Camel实现这个特定用例的最佳模式。有很多方法可以做到这一点-只要想想你想如何在纯Java中实现这样的逻辑,比如示例,然后将其移动到Camel。从行动流来看,没有区别。你有条件-你必须有IF或SWITCH操作,就是这样 直截了当的方法。 调用上一个服务后,您

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

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


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

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

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

  • 如果识别下一个调用的逻辑更复杂-创建将识别下一个调用的自定义处理器,设置特殊的交换属性,然后转到相同的“否则选择”块 例如,在这种情况下,您可以使用一些地图,或者按照自己的意愿进行绘制

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

    
    ${exchangeProperty.next_call}==“SERVICE1”/>
    ... 进程服务1结果逻辑。。。
    ${exchangeProperty.next_call}==“SERVICE2”/>
    ... 进程服务2结果逻辑。。。
    
    等等

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