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>