Java Spring集成聚合器-丢失消息
我想收集一些消息,比如10,并将它们作为列表传递给服务激活器,而不是逐个传递 背景:Java Spring集成聚合器-丢失消息,java,spring,spring-integration,Java,Spring,Spring Integration,我想收集一些消息,比如10,并将它们作为列表传递给服务激活器,而不是逐个传递 背景: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=...> <int:channel id="ch.http.in"/> <int:channel id="ch.http.trans"/> <int:channel id="ch.http.aggr"/> <i
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=...>
<int:channel id="ch.http.in"/>
<int:channel id="ch.http.trans"/>
<int:channel id="ch.http.aggr"/>
<int-http:inbound-channel-adapter path="test" channel="ch.http.in"/>
<int:map-to-object-transformer input-channel="ch.http.in" output-channel="ch.http.trans" type="demo.Req"/>
<int:aggregator
input-channel="ch.http.trans"
output-channel="ch.http.aggr"
release-strategy-expression="size() == 10"
correlation-strategy-expression="headers['id']"
ref="aggr" method="add"/>
<int:service-activator ref="srv" method="httpTest" input-channel="ch.http.aggr"/>
<bean id="srv" class="demo.IntService"/>
<bean id="aggr" class="demo.HttpAggregator"/>
</beans>
Req只是一个POJO
问题是聚合器方法从未被调用。如果没有aggregator,消息将毫无问题地传递给服务激活器。
使用Spring Integration 3.0.2.释放弹簧护套1.0.2.释放
编辑:
当我将correlation strategy expression=headers['id']更改为correlation strategy expression=payload.idReq对象具有属性id时,当我为每个Chunk传递不同的id时,它会工作例如。对于前10个,id=1;2下一个10。。。看来这就是关联策略的工作原理。我怎样才能通过呢?我只想限制聚合列表的大小。对;你必须在某些事情上相互关联;使用标题['id']将得到大量的一组项目,这些项目永远不会满足发布策略 对于像您这样的简单用例,在文本上进行关联-例如,关联表达式='foo'并将expiregroupsoncompletion=true。这将在发布后重置组,以便在下一条消息中可以启动具有相同关联id的新组
如果要在超时后释放部分组,则需要MessageGroupStoreReaper。或者,如果可以升级到4.0.x,聚合器现在有一个组超时或组超时表达式。对;你必须在某些事情上相互关联;使用标题['id']将得到大量的一组项目,这些项目永远不会满足发布策略 对于像您这样的简单用例,在文本上进行关联-例如,关联表达式='foo'并将expiregroupsoncompletion=true。这将在发布后重置组,以便在下一条消息中可以启动具有相同关联id的新组 如果要在超时后释放部分组,则需要MessageGroupStoreReaper。或者,如果可以升级到4.0.x,聚合器现在有一个组超时或组超时表达式
public class HttpAggregator{
public List<Req> add(List<Req> reqs) {
System.out.println(reqs);
return reqs;
}
}
public class IntService {
public void httpTest(Req msg){
System.out.println(msg);
}
}