Spring integration Spring Itegration聚合器:“的含义;发送超时“;XML配置
如果您能澄清聚合器“发送超时”配置参数的含义,我将不胜感激。根据Spring文档,此配置是Spring integration Spring Itegration聚合器:“的含义;发送超时“;XML配置,spring-integration,spring-jms,Spring Integration,Spring Jms,如果您能澄清聚合器“发送超时”配置参数的含义,我将不胜感激。根据Spring文档,此配置是将聚合消息发送到输出或回复通道的超时间隔。可选。 现在,根据我的理解,聚合器是一个被动组件,只根据收到消息后发布策略的结果决定是否发送消息;它不会根据超时事件释放消息,为此,需要一个单独的收割机组件这是否正确? 假设发送超时是聚合器将完成的消息组发送到输出通道所能花费的最大时间量。如果发送消息时时间用完(由于此参数设置),会发生什么情况。聚合器将如何处理准备发布、开始发送但从未完成的消息组?它会被标记为完成
将聚合消息发送到输出或回复通道的超时间隔。可选。
现在,根据我的理解,聚合器是一个被动组件,只根据收到消息后发布策略的结果决定是否发送消息;它不会根据超时事件释放消息,为此,需要一个单独的收割机组件这是否正确?
假设发送超时是聚合器将完成的消息组发送到输出通道所能花费的最大时间量。如果发送消息时时间用完(由于此参数设置),会发生什么情况。聚合器将如何处理准备发布、开始发送但从未完成的消息组?它会被标记为完成吗
谢谢这是一个经常被误解的属性。在很多地方(但不是所有地方),我们已经在XSD和文档中清楚地解释了这一点 底线是它很少被应用。它仅适用于输出通道可能阻塞的情况。例如,如果
输出通道
是具有容量的队列通道
,且队列已满;这是我们将等待向频道发送消息的时间
例如,如果输出通道是DirectChannel
,则它永远不适用
如果它确实适用,异常将被抛出回调用方,组将保持不变。如果配置MessageGroupStoreReaper
,将尝试重新释放这些组;如果该组仍有资格释放,收割者将再次尝试将该组发送到输出通道
如果同一组的新消息到达,并且发布策略仍然认为该组合格,则“卡住”组也将被释放(例如,它使用size>=n
而不是size==n
)
顺便说一句,虽然聚合器通常是一个被动组件,但我们在4.0中引入了组超时
(和组超时表达式
),允许在超时后释放部分组,即使没有收割器
但是,如果由于发送超时
而导致此类发布失败,则只有在配置了收割器的情况下才会尝试新的发布。感谢您的全面响应。很高兴直接收到您的回复,因为我已经阅读了您的许多帖子,我很欣赏您在Spring-Integration方面的工作。我的拙劣建议是在这里的Spring Integration参考手册(第5.4.4节)中添加一个注释,其中包含此答案的要点,这将避免混淆