Общее время ожидания для потоков 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' возвращается, если время ожидания шлюза истекло.

Это имеет смысл для вас?

Другие вопросы по тегам