1

アグリゲーターの入力チャネルにメッセージを送信すると、アグリゲーターは集約されたメッセージを出力チャネルにリリースします。アグリゲーターは、(集約のために) 少なくとも 2 つのメッセージを予期しています。それ以外の場合は、タイムアウトになるまで 10 秒間待機します。jdbc メッセージ ストアも使用しています。

以下は、私がテストしたシナリオです。

シナリオ 1 は正常に動作しています

メッセージ 1 および 2 の送信 -> 入力チャネル (input1) -> アグリゲーター 1 -> 出力チャネル (output1)

シナリオ 2 は正常に動作しています

メッセージ 1 および 2 の送信 -> 入力チャネル (input2) -> アグリゲーター 2 -> 出力チャネル (output2)

シナリオ 3 は正常に動作しています

メッセージ 1 のみの送信 -> 入力チャネル (input1) -> アグリゲーター 1 -> 出力チャネル (output1)

期限切れのメッセージを output2 に送信する代わりに、output1 に送信しているため、シナリオ 4 は失敗します。

メッセージ 1 のみの送信 -> 入力チャネル (input2) -> アグリゲーター 2 -> 出力チャネル (output1)

シナリオ 4 が失敗する理由を誰かが提案できますか?

以下は私の構成です

<int:service-activator ref="activator" method="output1_activator" input-channel="output1" /> 

<int:service-activator ref="activator" method="output2_activator" input-channel="output2" /> 

<int:aggregator input-channel="input1" 
    output-channel="output1" 
    ref="waiter" 
    expire-groups-upon-completion="true" 
    send-partial-result-on-expiry="true" 
    message-store="myJdbcMessageStore" /> 

<int:aggregator input-channel="input2" 
    output-channel="output2" 
    ref="waiter" 
    expire-groups-upon-completion="true" 
    send-partial-result-on-expiry="true" 
    message-store="myJdbcMessageStore" />

<bean id="aggregatorJdbcDataSource" class="o.s.j.d.DriverManagerDataSource"> ..... </bean> 

<bean id="myJdbcMessageStore" class="org.springframework.integration.jdbc.JdbcMessageStore"> 
    <constructor-arg index="0" ref="aggregatorJdbcDataSource" /> 
</bean> 

<bean id="telMessageStoreReaper" class="org.springframework.integration.store.MessageGroupStoreReaper">     <property name="messageGroupStore" ref="myJdbcMessageStore" /> 
    <property name="timeout" value="10000" /> 
</bean> 

<task:scheduled-tasks> 
    <task:scheduled ref="telMessageStoreReaper" method="run" fixed-rate="5000" /> 
</task:scheduled-tasks>
4

1 に答える 1