2016-05-04 3 views
1

Hi Artem/Gary/Friends,Как проверить, что какой-либо канал в потоке SI с пружинной интеграцией находится в состоянии обработки?

Существует требование, когда мне нужно развернуть мое ухо на сервере приложений на PROD. Поток решений начинается с JMS Message Listener в потоке SI, и вся инфраструктура основана на SI, где мы использовали исходящий адаптер JDBC-агрегатора задержки. Теперь перед развертыванием мне нужно знать, что в потоке SI нет активной нити (означает, что обработка завершена всем каналом, и между ними нет живого сообщения), чтобы я мог начать развертывание EAR на моем сервере приложений , Поскольку я использовал контрольную шину для остановки прослушивателя сообщений, но мне также нужно знать, что обработка сообщений завершена до конца, и в потоке не существует живого сообщения SI.

Не могли бы вы помочь.

Благодаря Ram

ответ

0

Ну, на самом деле я не знаю, почему вы об этом беспокоиться. Любое повторное развертывание приводит к остановке приложения и удалению ресурсов, поэтому после этого больше не будет выполняться нить.

Хотя вы можете рассмотреть возможность использования SmartLifecycleRoleController с целью назначения для всех критических конечных точек того же role и вызывать его stopLifecyclesInRole(), когда вам нужно.

С другой стороны конечная точка stop означает, что она не будет потреблять никаких новых сообщений от channel (или исходной системы, такой как JMS). Правильно любой длинный Thread будет по-прежнему активным и может быть даже с некоторым процессом вокруг сообщения. AFAIK контейнер пытается завершить все активные потоки для приложения и в конечном итоге просто прерывает, если в противном случае. Для этого случая вам определенно необходимо обеспечить семантику отказа транзакций/anknowlage для критически важных данных. Поэтому любой незавершенный процесс просто закончится с состоянием rallback/nack для сообщения. И новый экземпляр вашего приложения снова сможет начать работу над этим сообщением.

У меня нет ответа на вопрос о каком-либо крючке, чтобы проверить активность потока во время выполнения. Но мне интересно, сможете ли вы найти что-то вроде claim-check, чтобы подождать до sending. Часть равна processed после остановки конечной точки JMS.