如何检查spring-integration SI流中的任何通道是否处于处理状态?

时间:2016-05-04 18:36:25

标签: java spring spring-integration spring-integration-sftp

嗨Artem / Gary / Friends,

我需要在PROD上的应用服务器上部署我的耳朵。解决方案流程从SI流程中的JMS消息侦听器开始,整个框架基于SI,我们使用了delayer聚合器JDBC出站适配器。 在部署之前,我需要知道SI流中没有活动线程(意味着所有通道都已完成处理,中间没有实时消息),因此我可以在应用服务器上开始部署EAR。 由于我已经使用控制总线来停止消息监听器,但我还需要知道消息处理已经完成并且流程中不存在实时SI消息。

你能帮忙吗?

由于 拉姆

1 个答案:

答案 0 :(得分:0)

嗯,实际上我不确定你为什么担心这个问题。任何重新部署都会导致应用程序停止和资源处理,因此,之后不再有任何线程活动。

虽然您可以考虑使用SmartLifecycleRoleController作为目的,例如为所有关键端点分配相同的role,并在需要时调用其stopLifecyclesInRole()

端点stop从另一端意味着它不会消耗来自channel(或像JMS这样的源系统)的任何新消息。任何长时间运行的线程都将保持活动状态,甚至可以对消息进行一些处理。 AFAIK容器尝试最终确定应用程序的所有活动线程,否则最终只会中断。对于这种情况,您肯定应该确保关键数据的某些事务/知识拒绝语义。因此,任何未完成的进程最终都会以消息的rallback / nack状态结束。您的应用程序的新实例将能够重新开始该消息。

关于在运行时检查线程活动的一些钩子,我没有任何答案。但我想知道你是否能够找出类似claim-check之类的内容,等到JMS入站端点停止后sending部分等于processed