Java 8 и Apache Camel 2.19.5 здесь. Я хочу определить маршрут (используя Spring XML DSL), который выполняет следующее:
- потребляет сообщение из очереди ActiveMQ
- Десериализует XML-сообщение из строки в
Fizzbuzz
экземпляр
- Отправляет
Fizzbuzz
в FoobarGenerator
процессор
- Процессор
FoobarGenerator
генерирует Foobar
на обмене
- Копии сообщения
Foobar
затем передаются двум нижестоящим процессорам одновременно: (a) процессор Configurator
и (b) процессор Analyzer
6а. 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, marshalling и отправки в AMQ.
Как мне перенастроить этот маршрут, чтобы делать то, что я хочу?