Поток Task Executor не возвращается в пул в случае исключения

Когда во вложенной цепочке происходит сбой и она достигает потока канала ошибок, потоки исполнителя задач блокируются и не возвращаются в пул. Есть ли способ указать, что конец потока достигнут и их нужно вернуть в пул.

например сплиттер разбивает полезную нагрузку на 3 сообщения. Сообщения обслуживаются как -

message 1 - fileChannelTaskExecutor1
message 2 - fileChannelTaskExecutor2

если вызов шлюза с "вложенной цепочкой" успешен, 3-е сообщение доставляется любому из этих потоков исполнителя, который освобождается ранее.

Однако, если вызов шлюза с "вложенной цепочкой" завершается неудачно и достигает значения errChannel, оба вышеуказанных потока блока блокируются и не возвращаются в пул. В результате чего последующие сообщения (сообщение 3) не обрабатываются, поскольку в пуле нет потоков.

<bean id="fileChannelTaskExecutor"
class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor">
    <property name="corePoolSize" value="2"/>
    <property name="daemon" value="false"/>
</bean>

<int:channel id="splitterResponseChannel">
    <int:dispatcher task-executor="fileChannelTaskExecutor"/>
</int:channel>

<int:splitter input-channel="splitterRequestChannel" output-channel="splitterResponseChannel" >

<int:chain input-channel="splitterResponseChannel">
    <int:gateway request-channel="nested-chain" error-channel="errChannel"/>
</int:chain>

<int:chain input-channel="errChannel" output-channel="nullChannel">
     .....
</int:chain>

1 ответ

Решение

Проблема здесь заключается в одностороннем nullChannel и <int:gateway> природа запроса / ответа.

Даже если вы отправите исключение на error-channel Вы должны повторно бросить его на вызов или вернуть некоторые compensation сообщение из потока ошибок. В противном случае вы в конечном итоге будете висеть на воротах, которые ждут ответа вечно. По умолчанию конечно!

Вы можете настроить reply-timeout по этому вопросу и выпустите ваш поток в пул через некоторое время в случае односторонней ошибки.

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