Агрегатор интеграции Spring It:значение XML-конфигурации “тайм-аут отправки”
-
02-01-2020 - |
Вопрос
Я был бы признателен за некоторые разъяснения относительно значения параметра конфигурации "send-timeout" для агрегатора.Основываясь на документации Spring, эта конфигурация является The timeout interval for sending the aggregated messages to the output or reply channel. Optional.
Теперь, насколько я понимаю, Агрегатор является пассивным компонентом и решает отправлять сообщение или нет только на основе результата стратегии выпуска после получения сообщения;он не будет выпускать сообщения на основе событий тайм-аута, для этого необходим отдельный компонент Reaper. Правильно ли это?
Предполагая, что тайм-аут отправки - это максимальное количество времени, которое Агрегатор может потратить на отправку завершенной группы сообщений на выходной канал.Что произойдет, если закончится время (из-за настройки этого параметра) при отправке сообщения?Как Агрегатор будет обрабатывать эту группу сообщений, которая была готова к выпуску, начала отправляться, но так и не была завершена?Будет ли оно помечено как завершенное?
Спасибо
Решение
Это довольно часто неправильно понимаемый атрибут.Во многих местах (но не во всех) мы четко объяснили это в XSD и документах.
Суть в том, что он редко применяется.Это применяется только тогда, когда выходной канал может быть заблокирован.Например, если output-channel
является QueueChannel
с помощью capacity
и очередь уже полна;именно этого времени мы будем ждать, чтобы отправить сообщение на канал.
Если выходным каналом является, например, DirectChannel
, это никогда не применяется.
Если это действительно применимо, исключение будет возвращено вызывающему объекту, и группа останется.Попытки повторного выпуска таких групп будут предприниматься, если вы настроите MessageGroupStoreReaper
;если группа по-прежнему имеет право на освобождение, reaper снова попытается отправить группу на выходной канал.
"Застрявшая" группа также будет освобождена, если для той же группы поступят новые сообщения, и стратегия освобождения по-прежнему считает группу приемлемой (напримерон использует size >= n
вместо того , чтобы size == n
).
Кстати, хотя агрегатор, как правило, является пассивным компонентом, мы представили group-timeout
(и group-timeout-expression
) в версии 4.0, которая позволяет освобождать частичные группы по истечении тайм-аута, даже без жнеца.
Однако, если такого освобождения не произойдет из-за send-timeout
, новая попытка выпуска будет предпринята только в том случае, если настроен reaper.