我有一个聚合器,它应该使用某个相关键获取所有消息(在下面的示例中,我将其硬编码为10,因为相应的Splitter会生成10条消息)。
我可以通过日志记录看到很多消息,并且生成了所有10条消息,但聚合器从未接收过10条消息。以下是聚合器的代码:
@MessageEndpoint
public class MyAggregator {
@ReleaseStrategy
public boolean releaseStrategy( final List< Map< String, String > > msgs )
{
System.out.println( "Aggregator.releaseStrategy: received " + msgs.size() + " messages " );
if( msgs.size() == 10 ) {
System.out.println( "releasing the fragments!" );
return true;
}
return false;
}
@CorrelationStrategy
public String correlationStrategy( final Map< String, String > msg )
{
return msg.get( "job.oid" );
}
@Aggregator( inputChannel = "input",
outputChannel = "output" )
public Map< String, String > aggregate( final List< Map< String, String > > msgs ) {
System.out.println( "received all fragments of a job! Number of fragments: " + msgs.size() );
Map< String, String > msg = new HashMap< String, String >();
String jobOid = "";
if( !msgs.isEmpty()) {
jobOid = msgs.get( 0 ).get( "job.oid" );
}
msg.put( "job.oid", jobOid );
msg.put( "job.numberOfFragments", ""+msgs.size() );
return msg;
}
}
聚合器的多个实例是否正在使用这些消息,因此两者都不会收到属于一个相关组的所有10个实体?
我如何解决这个问题,因为我写的聚合器应该接收所有相关的消息并从中产生一条新消息。