2016-08-05 14 views
4

私は以下の構造を持っています。スプリング統合アグリゲータが正しく機能していません。

<int:publish-subscribe-channel id="updateProjectRequest" /> 
<int:channel id="aggregate-project"/> 

<int:service-activator input-channel="updateProjectRequest" output-channel="aggregate-project" ref="updateProjectResponseHandler" method="createFolder"/> 
<int:service-activator input-channel="updateProjectRequest" output-channel="aggregate-project" ref="updateProjectResponseHandler" method="createRepo"/> 

<int:aggregator input-channel="aggregate-project" ref="projectAggregator"> 

以下は私のAggregatorクラスです。

@Component("projectAggregator") 
public class ProjectAggregator { 

@Aggregator 
public boolean aggregatingMethod(List<Map<String, List<Project>>> items) { 
//////// CODE ////// 
} 

@ReleaseStrategy 
public boolean releaseChecker(List<Message<?>> messages) { 
//////CODE///// 
} 

@CorrelationStrategy 
public Map<String, List<Project>> correlateBy(Map<String, List<Project>> item) { 
    return item; 
} 

問題は、私は@ReleaseStrategy方法でメッセージの長さを印刷する場合、それは常にそれが増加するはずである私の知識によると、1のままです。あなたは上記のコードで間違っているものを見つけるのを助けてください。

答えて

1

pub/subチャネルのサブスクライバに送信されたメッセージを後で集計する場合は、apply-sequencetrueを設定する必要があります。

真の場合、correlationIdとシーケンス情報がメッセージヘッダーに追加されます。

<xsd:attribute name="apply-sequence" type="xsd:string" default="false"> 
    <xsd:annotation> 
     <xsd:documentation> 
      Specify whether the sequence size, sequence number, and correlation id 
      headers should be set on 
      Messages that are sent through this channel. 
     </xsd:documentation> 
    </xsd:annotation> 
</xsd:attribute> 
関連する問題