私のアグリゲータの出力チャネルであるQueueChannelがあります。このコードは、単一のノードクラスタでうまく動作します。私は2ノードクラスタに展開する瞬間、partitionStepは完了せず、STARTED状態にとどまります。 PartitionStepを見ると、受信メソッドで待機しているように見え、ステップが完了したことを決してマークしません。以下は私が使用している構成です。2ノードクラスタに展開すると、分割されたステップが開始状態のままです
<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">${oag_wl_nodes_url}</prop>
</props>
</property>
</bean>
<bean id="connectionFactory" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiTemplate" ref="jndiTemplate" />
<property name="jndiName" value="jmsConnectionFactory" />
</bean>
<int:channel id="requestsChannel" />
<bean id="reqQueue" class="org.springframework.jndi.JndiObjectFactoryBean"
lazy-init="true" scope="prototype">
<property name="jndiTemplate">
<ref bean="jndiTemplate" />
</property>
<property name="jndiName">
<value>masterRequestQueue</value>
</property>
</bean>
<int-jms:outbound-channel-adapter
connection-factory="connectionFactory" channel="requestsChannel" destination="reqQueue" />
<int:channel id="replyChannel" />
<bean id="replyQueue" class="org.springframework.jndi.JndiObjectFactoryBean"
lazy-init="true" scope="prototype">
<property name="jndiTemplate">
<ref bean="jndiTemplate" />
</property>
<property name="jndiName">
<value>masterReplyQueue</value>
</property>
</bean>
<int-jms:message-driven-channel-adapter connection-factory="connectionFactory" destination="replyQueue"
channel="replyChannel" acknowledge="transacted" />
<int:channel id="aggregatedReplyChannel">
<int:queue />
</int:channel>
<int:aggregator ref="partitionHandler"
input-channel="replyChannel" output-channel="aggregatedReplyChannel" />
こんにちはゲイリー、返信いただきありがとうございます。私たちは共通の応答キューを使用しているからです。アグリゲーターがその応答キューから読み取り、メッセージをキューチャネルに入れることができます。上記のアグリゲータ設定では、入力チャネルがreplychannelであり、出力チャネルがキューチャネルであるaggregatedReplyChannelであることが示されています。メッセージ駆動型のチャネルアダプタを使用してリプライキューから何も消費しないようにすることはできません。アグリゲータはマスターノードの応答キューからのメッセージを消費し、それらを出力チャネルに置きます。 aggregatedReplyChannel。 – anuj
ここにいくつかの背景があります。この場合のジョブは、マスターノードとして扱うことができる1つのノードからトリガーされるエンドポイントから呼び出されます。マスター構成はこのノードからのみロードする必要があると想定しています。私たちの仮定は正しいですか?マスター構成は他のノードからも起動されますか?私たちのスレーブ設定は、サーバー起動時にスプリングリスナーを使用してロードされる別の設定ファイルです。両方のクラスタノードがリクエストキューをリッスンします。 – anuj
すべてのノードをピアとして、実行時に1つを選択するのが一般的です仕事を開始するその場合、それぞれに専用の返信チャネルが必要です。応答キューに1つのマスターと1つのコンシューマしかない場合は、問題ではありません。チャンネルの種類は関係ありません。 DEBUGロギングを有効にして、マスタとスレーブの両方のメッセージに従うことをお勧めします。 –