Общее время ожидания для потоков ExecutorChannel
Наш процесс интеграции приложений определяется как разделитель -> шлюз ws -> агрегатор. Сплиттер разбивает запрос на список номеров счетов; таким образом, чтобы для каждого номера учетной записи инициировался вызов веб-службы и в агрегаторе агрегировались ответы от нескольких вызовов веб-службы. Канал между сплиттером и шлюзом ws определяется диспетчером "commonj WorkManagerTaskExecutor", так что каждый вызов веб-службы инициируется параллельно в разные темы.
Мы добавили таймаут для каждого вызова веб-службы. Но мы бы хотели установить единый таймаут для всего процесса. т. е. все вызовы веб-службы должны завершаться, скажем, за 50 секунд, а не устанавливать тайм-аут на 50 секунд для каждого отдельного вызова. commonj WorkManagerTaskExecutor предоставляет эту функцию методом waitForAll(Collection workItems, long timeout_ms) при реализации непосредственно через код. Есть ли способ использовать эту или аналогичную функцию для достижения наших требований.
1 ответ
К сожалению, нет, мы не можем использовать такую особенность TaskExecutor
,
С другой стороны, если вы скажете "один тайм-аут на весь процесс", я могу помочь вам с <gateway>
шаблон:
<chain>
<gateway request-channel="splitterChannel" reply-timeout="50000"/>
</chain>
куда reply-timeout
является:
Указывает, как долго этот шлюз будет ожидать ответного сообщения, прежде чем вернуться. По умолчанию это будет ждать бесконечно. 'NULL' возвращается, если время ожидания шлюза истекло.
Это имеет смысл для вас?