并非所有消息都收到Spring Aggregator

时间:2016-04-07 14:35:25

标签: java spring spring-integration spring-xd

我有一个聚合器,它应该使用某个相关键获取所有消息(在下面的示例中,我将其硬编码为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个实体?

我如何解决这个问题,因为我写的聚合器应该接收所有相关的消息并从中产生一条新消息。

0 个答案:

没有答案