Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在camel中为不同的目的地拆分请求消息?_Java_Web Services_Apache Camel - Fatal编程技术网

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

Java 如何在camel中为不同的目的地拆分请求消息?,java,web-services,apache-camel,Java,Web Services,Apache Camel,我有一条请求消息,格式如下: Class RequestMessage{ private ClassA classA; private ClassB classB; } 我希望在编排服务中拆分此请求消息,并希望将对象classA作为请求发送到dest1和classB到dest2,然后将聚合输出发送到客户端。我正在使用apachecamel。大多数情况下,我所能找到的只是关于XPath之类的东西,但没有得到任何帮助。我想到的一个解决方案是使用多播模式。这似乎是拆分器/聚合器模式

我有一条请求消息,格式如下:

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

我希望在编排服务中拆分此请求消息,并希望将对象
classA
作为请求发送到
dest1
classB
dest2
,然后将聚合输出发送到客户端。我正在使用apachecamel。大多数情况下,我所能找到的只是关于XPath之类的东西,但没有得到任何帮助。我想到的一个解决方案是使用多播模式。

这似乎是拆分器/聚合器模式


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

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

例如,在Spring DSL中(伪代码,未测试):


${body}
${body}是一个请求

或者类似于使用?

的拆分器的东西,您能帮我了解拆分器模式吗?我可以通过多播实现这一点,所以我以前没有使用过这些,但我建议您使用带有自定义拆分器bean的拆分器,然后传递给MessageRouter,以按负载类型选择目标。
<split>
   <simple>${body}</simple>
   <choice>
      <when>
         <simple>${body} is RequestA</simple>
         <to uri="dest1"/>
      </when>
      <otherwise>
        <to uri="dest2"/>
      </otherwise>
   </choice>
</split>