アグリゲーターの入力チャネルにメッセージを送信すると、アグリゲーターは集約されたメッセージを出力チャネルにリリースします。アグリゲーターは、(集約のために) 少なくとも 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>