Spring 在所有其他消息完成处理时集成进程消息
Spring integration process message when all other messages finished processing
有没有一种方法可以让 spring 集成图中的组件在所有其他消息(其他类型)完成处理后首先开始处理一条消息(一天结束)?在这个问题中,我们必须考虑 spring 集成可以启动多个线程。另一个限制是该组件将用于我无法控制的图表中。所以我不能说:
- “其他类型”消息处理需要多长时间
- 如果某些消息 运行 有误
- 只是通过一些过滤器
- 乘以发布-订阅渠道
- 如果使用了一些TaskExecutor(引入新的线程和事务边界)
- 没有结束神器,我可以检查它是否存在
当“一天结束”到达我的组件时,“其他类型”消息可能仍在处理中。即使我的组件位于图表的末尾,消息 运行 也可能没有到达那里。消息被重复的其他可能性,我不知道有多少次。因此,我不知道我应该等待多长时间才能完成“结束日”处理。
也有可能另一个 tool/framework 会使这个问题更容易或完全消除。
was tinking about checking the task executor if all threads are free, but there might be several task executors some of which not involved.
这听起来与你在问题中所说的无关,当你声称你使用的过程是一个黑匣子时。
如果您真的可以以某种方式访问该过程,例如via ChannelInterceptor
: https://docs.spring.io/spring-integration/docs/current/reference/html/core.html#channel-interceptors,所以你可以有一些像 AtomicBoolean active
这样的全局 bean 在流程的开始设置并在结束时重置。因此,您的“一天结束时”消息将定期轮询此标志以确定何时发送它。当标志为 false
.
时,您只需简单地使用 @InboundChannelAdapter
来生成您的消息或 null
有没有一种方法可以让 spring 集成图中的组件在所有其他消息(其他类型)完成处理后首先开始处理一条消息(一天结束)?在这个问题中,我们必须考虑 spring 集成可以启动多个线程。另一个限制是该组件将用于我无法控制的图表中。所以我不能说:
- “其他类型”消息处理需要多长时间
- 如果某些消息 运行 有误
- 只是通过一些过滤器
- 乘以发布-订阅渠道
- 如果使用了一些TaskExecutor(引入新的线程和事务边界)
- 没有结束神器,我可以检查它是否存在
当“一天结束”到达我的组件时,“其他类型”消息可能仍在处理中。即使我的组件位于图表的末尾,消息 运行 也可能没有到达那里。消息被重复的其他可能性,我不知道有多少次。因此,我不知道我应该等待多长时间才能完成“结束日”处理。
也有可能另一个 tool/framework 会使这个问题更容易或完全消除。
was tinking about checking the task executor if all threads are free, but there might be several task executors some of which not involved.
这听起来与你在问题中所说的无关,当你声称你使用的过程是一个黑匣子时。
如果您真的可以以某种方式访问该过程,例如via ChannelInterceptor
: https://docs.spring.io/spring-integration/docs/current/reference/html/core.html#channel-interceptors,所以你可以有一些像 AtomicBoolean active
这样的全局 bean 在流程的开始设置并在结束时重置。因此,您的“一天结束时”消息将定期轮询此标志以确定何时发送它。当标志为 false
.
@InboundChannelAdapter
来生成您的消息或 null