1

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

Есть ли способ заставить агрегатор использовать последнее сообщение, полученное вместо этого?

Агрегация объединит полезную нагрузку в 1 строку.

Простой сценарий: 3 сообщения с такими же ID корреляции и размером последовательности 2, упорядоченное по времени получил

  • последовательности #: 1; полезная нагрузка: abc
  • последовательность #: 1; полезная нагрузка: def
  • последовательность #: 2; Полезная нагрузка: ГХИ

Токовый выход: abcghi

Ожидаемый выход: defghi

Этот сценарий происходит, когда последовательность # 2 отсутствует, который предназначен для 1-го сообщения. И идентификатор корреляции (полученный из декодированной полезной нагрузки) очень ограничен, поэтому он будет использоваться несколько раз.

Первоначальное сообщение

Необработанные сообщения пришли в следующем формате:

  • "Последовательность Размер", "порядковый номер", "ID", "Текст"
  • ID колеблется между 0 -9
  • пример сообщение: 2,1,8, а

образец сырого Сообщ е полезной нагрузка:

  • 2,1,8, а
  • 2,1,8, Защита
  • 2,2,8, ГХИ

Агрегатор в основном объединить текст

ответ

0

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

Однако для обеспечения желаемого поведения вам также понадобится специальный журнал групп сообщений. иначе выход будет abcdefghi.

Однако отброшенное сообщение не будет отправлено на канал сброса в этом случае.

Как правило, не рекомендуется повторно использовать идентификатор корреляции; если необходимо, используйте group-timeout или жнец для отбрасывания частичной группы до любой возможности повторного использования идентификатора корреляции.

Кстати, вам может быть проще использовать пользовательские CorrelationStrategy и ReleaseStrategy вместо использования по умолчанию и манипулирования заголовками.

+0

спасибо, гэри! Как я уже сказал, в настоящее время я выясняю, как настроить это (используя нестандартные), главным образом, при перезаписи сообщений с одинаковой последовательностью. и FYI, да, это необходимо для моего случая повторного использования корреляции, поскольку он получен из полезной нагрузки сообщения, с которой я не могу манипулировать. Я использовал групповой тайм-аут, но он не ведет себя так, как я ожидал. Вы можете обратиться к другому моему вопросу здесь: http://stackoverflow.com/questions/30421220/group-timeout-does-not-work-as-expected-in-spring-aggregator/30424784 скоро обновится , – psyntium

+0

исправьте меня, если я ошибаюсь здесь, корреляционная стратегия только для того, чтобы указать, какое сообщение принадлежит какой группе, а release - это указать, когда сгруппированные сообщения могут перейти к следующему пути. и мой фокус должен быть с пользовательской группой сообщений, чтобы сообщение с одним и тем же номером. номер перезапишет старый. Я ошибаюсь? – psyntium

+0

, если у вас есть образец магазина групповой группы сообщений? – psyntium

Смежные вопросы