ActiveMQ / Camel: порождение нескольких маршрутов, ожидание завершения всех - PullRequest
0 голосов
/ 03 февраля 2020

Я новичок в activeMQ / Camel, поэтому, пожалуйста, потерпите меня.

На верблюжьем маршруте я использую сплиттер для создания нескольких под маршрутов. Каждый из этих маршрутов будет использовать некоторые внешние API для выполнения определенной работы и опроса, пока работа не будет завершена. Я так далеко.

Теперь мне нужно запустить последнее действие, чтобы собрать результат всех этих маршрутов. Как бы я поступил так Camel / AMQ?

Я думал о публикации сообщения в каждом суб-маршруте в очередь AMQ, но я еще не нашел способ дождаться получения N сообщений в этой очереди, прежде чем использовать его в моем последнем Верблюжий маршрут.

Спасибо.

1 Ответ

0 голосов
/ 04 февраля 2020

Если вам нужно собрать все результаты из под-маршрутов сплиттера и выполнить некоторые действия с этими результатами после завершения всех под-маршрутов, то вы можете использовать стратегию агрегирования (https://camel.apache.org/manual/latest/aggregate-eip.html) на разделителе.

Используя стратегию агрегирования, Exchange после разделения будет содержать результаты всех под-маршрутов.

Пример использования Java DSL:

.split(expression, new GroupedExchangeAggregationStrategy())
   ...
.end()

GroupedExchangeAggregationStrategy объединяет все разделенные биржи в список. При необходимости вы можете использовать другую предопределенную стратегию агрегирования или создать собственную, расширив org. apache .camel.processor.aggregate.AggregationStrategy .

...