Шаблон Camel для агрегирования сообщений из нескольких источников и перенаправления к месту назначения

У меня есть одна проблема, и я не знаю, как ее решить с помощью верблюда. Я искал соответствующий EIP в документации по верблюдам, но безрезультатно.

Теперь у меня есть простой маршрут:

<route id="routeId">
    <from uri="Source1"/>
    <from uri="Source2"/>
    <to   uri="Destination"/>
</route>

Оба источника отправляют сообщения JMS в пункт назначения, и в какой-то момент, когда источник завершает свою работу, он отправляет определенное сообщение о завершении с некоторым флагом. Что мне нужно сделать, так это собрать или подсчитать эти конечные сообщения и отправить одно конечное сообщение в пункт назначения, когда я получаю конечные сообщения из обоих источников. Только когда я получаю два конечных сообщения (представьте, что это простое сообщение с некоторым флагом заголовка), тогда я должен отправить одно по назначению.

Извините, если объяснение проблемы недостаточно ясно.

Заранее спасибо.


person Zygimantas Gatelis    schedule 14.08.2014    source источник


Ответы (2)


агрегатор и шаблоны фильтров можно использовать для этого сценария...

  • использовать фильтр для обнаружения «конечных» сообщений и маршрутизации их через агрегатор
  • используйте настраиваемую стратегию агрегации для создания единого конечного сообщения со счетчиком
  • используйте настраиваемый предикат завершения, чтобы вызвать сообщение о завершении

что-то вроде этого...

from("source1").to("direct:aggregateRoute"); 
from("source2").to("direct:aggregateRoute"); 
from("direct:aggregateRoute")
    .filter(header("isEndMessage").isEqualTo("true"))
        .aggregate(constant(true), new MyAggregationStrategy())
        .completionPredicate(new MyCompletionStrategy())
    .to("destination");
person Ben ODay    schedule 14.08.2014

Если вы просто хотите выбрать из нескольких входных данных и не хотите выполнять какие-либо изменения во входящем сообщении, вы можете сделать что-то вроде этого:

from("URI1", "URI2", "URI3").to("DestinationUri");

для получения дополнительной информации проверьте эту ссылку это помогло мне

person Clover    schedule 31.01.2019
comment
Я не могу найти метод from(), который принимает несколько URI. Знаете ли вы, какая версия Camel у вас работала? javadoc.io/doc/org.apache.camel/camel-core-engine/latest/org/ - person j.i.t.h.e.s.h; 03.11.2020