如何在驼峰中为不同的目的地拆分请求消息?

时间:2013-09-23 15:55:08

标签: java web-services apache-camel

我有一条请求信息,格式为:

Class RequestMessage{
    private ClassA classA;
    private ClassB classB;
}

我想在我的业务流程服务中拆分此请求消息,并希望将对象classA作为请求发送到dest1classBdest2,然后发送聚合输出对客户。我正在使用Apache Camel。大多数情况下,我所能找到的只是拆分XPath或其他东西,但无法得到任何帮助。我想到的一个解决方案是使用多播模式。

2 个答案:

答案 0 :(得分:0)

这看起来像分裂器/聚合器模式。

否则,我建议使用多播发送到两条路由。在这些路线中,将主体分别更改为body.getClassA()body.getClassB()。在每条路线的末尾,您可以更新原始身体。这可以通过在设置主体之前将原始主体放入标题中来完成。

答案 1 :(得分:0)

也许您可以将这两个项分解为两个不同的请求对象,例如RequestMessageA和RequestMessageB(可能带有基类或接口,它们都扩展为BaseRequestMessage)。然后你可以在你的路线中有一个拆分器来拆分你的请求(例如,如果你在列表中有两个请求),然后将每个味道路由到所需的目的地。

以Spring DSL为例(伪代码,未经测试):

<split>
   <simple>${body}</simple>
   <choice>
      <when>
         <simple>${body} is RequestA</simple>
         <to uri="dest1"/>
      </when>
      <otherwise>
        <to uri="dest2"/>
      </otherwise>
   </choice>
</split>

使用content based routing EIP

与分割器类似的东西