Spring Integration: Сохранение порядка в агрегаторе - PullRequest
0 голосов
/ 07 апреля 2020

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

<release-strategy-expression="size() == 10"/>

Мы используем group-timeout и также установили send-partial-result-on-expiry=true.

Учитывая этот сценарий использования, я прав в сделать вывод, что нет встроенного способа сохранить первоначальный порядок потока событий?

Я пытался использовать SequenceSizeReleaseStrategy с releasePartialSequences, установленным в значение true.

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

Я что-то упускаю? Есть ли способ сохранить порядок в агрегаторе с учетом этого варианта использования?

1 Ответ

1 голос
/ 07 апреля 2020

Для этой цели существует шаблон EI resequencer: https://docs.spring.io/spring-integration/docs/5.3.0.M4/reference/html/message-routing.html#resequencer.

Итак, вы помещаете его непосредственно перед агрегатором, а когда этот агрегатор выпускает группу, сообщения будет находиться в списке результатов в порядке следования.

Повторный секвенсор также может освобождать частичные группы, если все пробелы в последовательности выполнены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...