Агрегатор интеграции Spring It:значение XML-конфигурации “тайм-аут отправки”

StackOverflow https://stackoverflow.com//questions/25089371

  •  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-timeoutgroup-timeout-expression) в версии 4.0, которая позволяет освобождать частичные группы по истечении тайм-аута, даже без жнеца.

Однако, если такого освобождения не произойдет из-за send-timeout, новая попытка выпуска будет предпринята только в том случае, если настроен reaper.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top