Агрегирование Apache Camel/EIP после фильтрации

В настоящее время я использую Apache Camel

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

  • Вы начинаете с некоторого сообщения, состоящего из многих частей.
  • Затем сообщение разбивается на части
  • Некоторые из этих сообщений затем отфильтровываются.
  • Остальные сообщения трансформируются
  • Затем мы хотим сгруппировать сообщения обратно в одно сообщение.

Мы знаем, сколько сообщений приходит, если бы мы не фильтровали, агрегатор мог бы просто ждать этого количества сообщений.

Вот некоторые из моих идей, мне не очень нравится ни одна из них

  • Фильтр отправляет некоторое сообщение агрегатору, в котором сообщается, сколько сообщений ожидать
  • Фильтр не является фильтром, он отправляет все сообщения, которые он отфильтровал бы, прямо в агрегатор, а агрегатор действует как фильтр.

person Jordan Chapman    schedule 06.06.2014    source источник
comment
Почему вам не нравится ни одна из ваших идей?   -  person Steve Harrington    schedule 07.06.2014


Ответы (1)


См. пример обработчика составных сообщений с только разделителем

Если вы используете фильтр, то фильтр устанавливает свойство на бирже, была ли биржа отфильтрована или нет. Затем вы можете использовать эту информацию в стратегии агрегирования, чтобы знать, хотите ли вы объединить это сообщение в это единственное результирующее сообщение.

См. раздел узнать, был ли отфильтрован обмен или нет на странице

person Claus Ibsen    schedule 07.06.2014
comment
Спасибо за ответ, у меня есть несколько уточняющих вопросов. Как мне передать отфильтрованные сообщения агрегатору? Прямо сейчас я использую .filter(Predicate) и после фильтра я вижу только обмены, которые не были отфильтрованы. Я заметил, что в книге EIP есть концепция инициализированного агрегатора, когда агрегатору может быть отправлено управляющее сообщение, в котором говорится, как агрегировать, как лучше всего (пример?) сделать это в верблюде? - person Jordan Chapman; 09.06.2014