此处为Java 8和Apache Camel 2.19.5。我想定义一条路由(使用Spring XML DSL)来完成以下任务:
Fizzbuzz
实例Fizzbuzz
发送到FoobarGenerator
处理器FoobarGenerator
处理器在交易所上生成Foobar
Foobar
消息的副本随后同时传递到两个下游处理器:(a)Configurator
处理器和(b)Analyzer
处理器
6a。 Configurator
处理Foobar
并将一些结果存储在数据库中
6b。 Analyzer
处理Foobar
,然后路由将该实例发送到解串器(返回字符串),然后将该字符串发送到另一个AMQ队列这是我到目前为止所拥有的:
<route id="fizzbuzz_processor">
<!-- Step 1: Consume Fizzbuzz XML from AMQ -->
<from uri="activemq:fizzbuzzes"/>
<!-- Step 2: Deserialize into Fizzbuzz POJO instance, using XStream -->
<unmarshall ref="xs"/>
<!--
Step 3 + 4: Send to FoobarGenerator processor;
output is a 'Foobar' POJO instance
-->
<to uri="bean:foobarGenerator"/>
<!-- Step 5: Send Foobar to two places at the same time -->
<multicast>
<!-- Step 6a: Foobar goes to Configurator processor -->
<to uri="bean:configurator"/>
<!-- Step 6b: Foobar also goes to Analyzer processor -->
<to uri="bean:analyzer"/>
<!--
AFTER Analyzer, Foobar gets serialized into XML and sent
to another queue
-->
<marshall ref="xs"/>
<to uri="activemq:foobars"/>
</multicast>
</route>
此设置的问题在于,据我所知,多播器只能使用将其向其发送消息的顶级终结点定义。因此,按照我上面配置的方式,多播器会将消息发送到:(a)bean:configurator,(b)bean:analyzer,(c)XStream / marshaller和(d)activemq:fizzbuzzes ,而不是同时发送到bean:configurator和bean:analyzer,然后在bean:analyzer之后,将其编组并发送到AMQ。
如何重新配置此路由以执行我想要的操作?
答案 0 :(得分:0)
结果证明您可以:
<route id="fizzbuzz_processor">
<!-- Step 1: Consume Fizzbuzz XML from AMQ -->
<from uri="activemq:fizzbuzzes"/>
<!-- Step 2: Deserialize into Fizzbuzz POJO instance, using XStream -->
<unmarshall ref="xs"/>
<!--
Step 3 + 4: Send to FoobarGenerator processor;
output is a 'Foobar' POJO instance
-->
<to uri="bean:foobarGenerator"/>
<!-- Step 5: Send Foobar to two places at the same time -->
<multicast parallelProcessing="true">
<!-- Step 6a: Foobar goes to Configurator processor -->
<to uri="bean:configurator"/>
<!-- Step 6b: Foobar also goes to Analyzer processor -->
<to uri="direct:someOtherRoute"/>
</multicast>
</route>
direct:someOtherRoute
转到另一条路线,该路线实现了我描述的6b之后的所有内容,并且 boom 您已同时多播到两个“地点”。
答案 1 :(得分:-1)
为什么要使用多播器EIP?似乎可以通过完全删除多播程序来获得相同的结果,例如:
Select count(a.User_id) as Users , p.Job_Title
from Jobs_posted p
left join Jobs_Applied a
on p.job_id = a.job_id and p.Empl_id=a.Empl_id
group by p.Job_Title
或者将marshal / activemq部分留在多播器之外。骆驼应该完成多播程序,然后继续进行元帅。