Многоадресная агрегация верблюдов с выигрышем в быстром маршруте - PullRequest
0 голосов
/ 18 марта 2019

Возможно ли на верблюде создать многоадресную рассылку для n маршрутов и от n маршрута, в зависимости от того, что является самым быстрым, определить единое агрегированное значение всей многоадресной рассылки?

Итак, например:

from("direct:anywhere")
  .process(e -> { e.getIn().setHeader("isComplete", false)})
  .multicast()
    .parallelProcessing(true)
    .to("direct:somewhere", "direct:somewhere2")
    .end()
  .aggregate(header("isComplete"))
    .completion(header("isComplete").isEqualTo(true))
    .completionSize(1); // do i need this at all if i want the fastest route?
  .choice()..... // based on the fastest route's logic do something else with the exchange.getIn() headers or body

Я пробовал агрегатные стратегии как для многоадресной рассылки, так и для агрегата, но они даже ни разу не вызывались с нулевым oldExchange.

Каким-то образом агрегат не может видеть изменения заголовка внутри многоадресных маршрутов или предикат агрегата плох?

1 Ответ

0 голосов
/ 18 марта 2019

Похоже, что ни один из компонентов верблюда (split, multicast) не поддерживает нормальные программные прерывания, поэтому необходимо создать декомпозицию маршрутов и собрать их обратно вручную с помощью внешней помощи, например, для сохранения / получения результатов на карте

R1 (multicast to seda routes) -> R2 (timeout logic) -> R4 - get results from a Map(either R2 timeouted or R3 put there something faster) 
   \                                                  ^     should be threadsafe
    \                                                /  
     ˇ  R3 quickly found a result for the problem   /
...