我们正在使用Spring Integration 4.2.3聚合器组件和定义的组超时,并期望在给定的超时值内对组进行超时,同时向组和组添加消息。发布大小标准未得到满足。
但是我们看到不同的结果,当我们向服务输入大量负载时,聚合器正在等待所有要添加到组的消息,而不是在超时达到时使组到期。
有没有办法覆盖聚合器功能,以便在超时组时查看第一条消息而不是最后一条消息。
以下是我们的聚合器配置。
<int:aggregator id="adobeJdbcAggregator" input-channel="adobePubSubChannel"
output-channel="aggregatorOuputChannel"
correlation-strategy-expression="headers['eventType']"
message-store="ccsJdbcMessageStore"
send-partial-result-on-expiry="true"
group-timeout-expression="10000"
expire-groups-upon-completion="true"
expire-groups-upon-timeout="true"
release-strategy-expression="size() ==100"
ref="ccsAggregatorBean"
method="processMessage"
auto-startup="true"/>
答案 0 :(得分:2)
嗯,实际上即使你现在也可以做你需要的。使用相同的group-timeout-expression
。但是,您必须参考评估上下文的#root
对象,这正是您所需要的 - MessageGroup
。有了这个,你可以打电话给你:
/**
* @return the timestamp (milliseconds since epoch) associated with the creation of this group
*/
long getTimestamp();
/**
* @return the timestamp (milliseconds since epoch) associated with the time this group was last updated
*/
long getLastModified();
因此,原始请求的表达式可能如下:
group-timeout-expression="timestamp + 10000 - T(System).currentTimeMillis()"
我们得到调整后的超时,该超时将应用于计划任务,其值为:new Date(System.currentTimeMillis() + groupTimeout));
。
答案 1 :(得分:0)
没有;超时当前仅基于最后一条消息的到达。
如果您改为使用MessageGroupStoreReaper
,则时间默认基于组创建,但可以通过将组存储的timeoutOnIdle
设置为true来更改。
如果您的组根本没有超时,则默认taskScheduler
中的线程池可能已耗尽 - 默认情况下它只有10个线程。
您可以增加池大小或将专用调度程序注入聚合器。
答案 2 :(得分:0)