2016-04-07 4 views
1

Я хотел бы, чтобы добиться чего-то вроде этого:Как отправить сообщения на «боковой канал» весной XD?

[Source] --> [Splitter] --B--> [Processor] --B--> [Aggregator] ---> [Sink] 
       |          ^
       |          | 
       |--------------------C-------------------| 

После нескольких процессоров Wich включают в себя бизнес-логику, специальный производитель должен испускать несколько сообщений типа B вместе с сообщением управления C.

Процессоры с дальнейшей бизнес-логикой будет работать над этими сообщениями.

Агрегатор должен «собирать» все результаты вместе с контрольным сообщением.

Сообщение управления будет содержать в основном число из генерирует сообщения (B), так что агрегатор может иметь знания ли

  1. уже прибыл
  2. тайм-аут произошел
все ожидаемые сообщения от B

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

Вообще говоря: возможно ли иметь трансформаторы с более чем одним входным или выходным каналом?

ответ

1

2 первый -

Стандартный модуль агрегатор имеет timeout параметр (по умолчанию 50 секунд).

Он реализован с поясом группы сообщений, который запускается каждый тайм-аут секунд, поэтому фактический тайм-аут будет до 2 x timeout со средним значением 1.5 x timeout.

У агрегатора теперь есть свойство group-timeout, что более точно, чем использование повторно; для этого потребуется специальный агрегатор-агрегатор. Он также имеет group-timeout-expression, поэтому тайм-аут может меняться в зависимости от условий выполнения (например, текущего размера группы).

Сейчас 1 -

Там нет стандартного механизма для передачи данных бокового диапазона от 1 модуля к другому. Как правило, модули обмениваются данными друг с другом, устанавливая заголовки сообщений. Так стандартный сплиттер отправляет информацию в агрегатор (sequenceNumber и sequenceSize).

Вы можете создать собственный агрегаторный процессор с настраиваемым ReleaseStrategy для использования других заголовков.

В целом: возможно ли иметь трансформаторы с более чем одним входным или выходным каналом?

Не с XD, а с последующим проектом (spring-cloud-stream) поддерживает привязку нескольких входов/выходов к приложениям.

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