我希望对" send-timeout"的含义做一些澄清。聚合器的配置参数。根据Spring文档,此配置为The timeout interval for sending the aggregated messages to the output or reply channel. Optional.
现在,基于我的理解,聚合器是一个被动组件,并且只在收到消息后根据发布策略的结果决定是否发送消息;它不会根据超时事件释放消息,因此需要一个单独的Reaper组件。 这是正确的吗?
假设发送超时是聚合器将完成的消息组发送到输出通道所花费的最长时间。如果在发送消息时耗尽(由于此参数设置)会发生什么。 Aggregator如何处理准备发布的消息组,开始发送但从未完成?它会被标记为完整吗?
由于
答案 0 :(得分:2)
这是一个相当普遍被误解的属性。在许多地方(但不是全部),我们已经在XSD和文档中清楚地解释了它。
底线是很少应用。它仅适用于输出通道可以阻塞的情况。例如,如果output-channel
是QueueChannel
且capacity
并且队列已满;这是我们等待将信息发送到频道的时间。
如果输出通道是DirectChannel
,则它永远不会适用。
如果确实适用,则异常将被返回给调用者,该组将保留。如果您配置MessageGroupStoreReaper
,则会尝试重新发布此类组。如果该组仍有资格释放,则收割者将再次尝试将该组发送到输出通道。
如果新消息到达同一组并且发布策略仍然认为该组符合条件(例如,它使用size >= n
而不是size == n
),则“卡住”组也将被释放。
group-timeout
(和group-timeout-expression
),它允许部分组在超时后释放,即使没有收割机。< / p>
但是,如果由于send-timeout
而未能发生此类发布,则只有在配置了收割机时才会进行新的发布尝试。