嗨Artem / Gary / Friends,
我需要在PROD上的应用服务器上部署我的耳朵。解决方案流程从SI流程中的JMS消息侦听器开始,整个框架基于SI,我们使用了delayer聚合器JDBC出站适配器。 在部署之前,我需要知道SI流中没有活动线程(意味着所有通道都已完成处理,中间没有实时消息),因此我可以在应用服务器上开始部署EAR。 由于我已经使用控制总线来停止消息监听器,但我还需要知道消息处理已经完成并且流程中不存在实时SI消息。
你能帮忙吗?
由于 拉姆
答案 0 :(得分:0)
嗯,实际上我不确定你为什么担心这个问题。任何重新部署都会导致应用程序停止和资源处理,因此,之后不再有任何线程活动。
虽然您可以考虑使用SmartLifecycleRoleController
作为目的,例如为所有关键端点分配相同的role
,并在需要时调用其stopLifecyclesInRole()
。
端点stop
从另一端意味着它不会消耗来自channel
(或像JMS这样的源系统)的任何新消息。任何长时间运行的线程都将保持活动状态,甚至可以对消息进行一些处理。 AFAIK容器尝试最终确定应用程序的所有活动线程,否则最终只会中断。对于这种情况,您肯定应该确保关键数据的某些事务/知识拒绝语义。因此,任何未完成的进程最终都会以消息的rallback / nack状态结束。您的应用程序的新实例将能够重新开始该消息。
关于在运行时检查线程活动的一些钩子,我没有任何答案。但我想知道你是否能够找出类似claim-check
之类的内容,等到JMS入站端点停止后sending
部分等于processed
。