Spring integration MessageGroupStoreReaper它到底是干什么用的

Spring integration MessageGroupStoreReaper它到底是干什么用的,spring-integration,Spring Integration,所有spring项目都有大量非常有用的文档,spring集成项目也是如此,但我希望能够收集更多信息的一个主题是消息组收割者。基本上,它似乎是一种机制,可以从外部影响聚合器来发布一些消息。目前尚不清楚的是,它与发布策略有多不同或相似。它实际上是从聚合器中释放消息,然后由流中的后续组件进行处理,还是清空聚合器,就像丢弃聚合的消息一样。第二,控制哪些消息被释放,因此属于特定组的消息被释放,而不是其他消息 在SpringIntegration4.0之前,聚合器是一个完全被动的组件。组释放(或不释放)是由

所有spring项目都有大量非常有用的文档,spring集成项目也是如此,但我希望能够收集更多信息的一个主题是消息组收割者。基本上,它似乎是一种机制,可以从外部影响聚合器来发布一些消息。目前尚不清楚的是,它与发布策略有多不同或相似。它实际上是从聚合器中释放消息,然后由流中的后续组件进行处理,还是清空聚合器,就像丢弃聚合的消息一样。第二,控制哪些消息被释放,因此属于特定组的消息被释放,而不是其他消息

在SpringIntegration4.0之前,聚合器是一个完全被动的组件。组释放(或不释放)是由新消息的到达触发的-当咨询释放策略以查看消息所属的组是否可以释放时。那么,我们如何丢弃(或释放)一个空闲且一段时间没有新消息到达的组呢

收割机按计划运行,可以检测“卡住”的组,并根据时间释放它们,而不会收到新消息

它还用于删除空组-可以配置聚合器,使空组保持存在,以便丢弃迟到的消息,而不是形成新组。空组可以按不同的时间表收割,以部分完成组

收割机使符合配置标准的所有组过期;如果该组通过标准,则该组已过期;否则它不是,并且将在下次收割者运行时被考虑。收割者采取的行动(部分释放、丢弃等)取决于聚合器上的其他设置

Spring Integration 4.0引入了新属性(
组超时
组超时表达式
),允许在超时后自动释放部分组,而无需收割机(当组的新消息到达时,计时器处于待命状态)。在这种情况下,收割者仍然可以用来终止(删除)空组


我希望这能解释收割者的功能。

谢谢你的帮助。我仍然不清楚如何在消息收割机上具体指定这个标准,以便专门发布一些组。在发布策略中,这是有意义的,因为RP是为每个传入消息调用的,并且它发布的组是基于它为哪个消息返回true的。但是,由于收割者是一个外部组件,您如何在其上指定组标准。举个小例子可能会有所帮助。新属性
组超时
组超时表达式
似乎非常有用。期待关于SI 4.0的网络研讨会。参考手册()中有一个示例。在这种情况下,它每10秒运行一次,超时30秒。我认为你想得太多了;有关
超时
属性(),请参阅javadoc。收割者每隔一段时间运行一次,如果任何组的时间超过超时时间,它将被强制完成。超时时间从组创建(默认)或上次更新时开始计算。OK有意义。最后一个问题是,是否可以将group timeout属性配置为查看空闲活动(自上次消息到达后的时间)而不是组创建时间(自第一条消息到达后的时间)。我在jdocs中看不到关于前者的任何地方。
组超时
从最后一条消息到达时(而不是组创建时间)触发。无法将其配置为使用组创建时间。对于收割者,默认值为组创建时间,但可以配置为使用上次修改的时间。对于
组超时
,没有这样的选择,它总是基于最后一条消息的到达。太好了,所以组超时用于空闲活动,这是完美的。谢谢