有没有一种方法可以让spring集成图中的组件在所有其他消息(其他类型)完成处理后首先开始处理一条消息(一天结束)?在这个问题上,我们必须考虑spring集成可以启动多个线程。另一个限制是这个组件将用于我无法控制的图中。所以我不知道:
“其他类型”消息处理需要多长时间
如果某些消息出错
只是经过一些过滤
乘以发布-订阅频道
如果使用了某些taskexecutor(引入新线程和事务边界)
没有我可以检查它是否存在的结束工件
当“一天结束”到达我的组件时,“其他类型”消息可能仍在处理中。即使我的组件位于图的末尾,运行它的消息也可能没有到达那里。另一种可能性是一条消息被多次复制,我不知道有多少次。因此,我不知道我应该等待多久与“结束o天”处理。
其他工具/框架也有可能使这个问题变得更容易或完全消除。
1条答案
按热度按时间cczfrluj1#
正在修补检查任务执行器是否所有线程都是空闲的,但是可能有几个任务执行器,其中一些没有涉及。
当你声称你使用的过程是一个黑匣子时,这听起来似乎与你在问题中所说的无关。
如果您真的能够以某种方式访问流程,例如通过
ChannelInterceptor
: https://docs.spring.io/spring-integration/docs/current/reference/html/core.html#channel-拦截器,这样你就可以有一些像AtomicBoolean active
在流程开始时设置,在结束时重置。因此,您的“在一天结束时”消息将定期轮询此标志,以确定何时发送它。你只需要用@InboundChannelAdapter
产生你的信息或null
当旗子false
.