1

n 個のサーバー (S1、S2、....Sn など) にアプリケーションをデプロイするという要件があります。サーバーの 1 つ (S1 など) で定義された activeMQ キューがあります。サーバーを構成しました。メッセージを生成し、S1 で構成されている同じキューに配置します。すべてのサーバーは、生成されたメッセージを格納するために同じキューを使用するように構成されていますが、私の要件は、n 個のサーバーのうち 1 つだけが queue からのすべてのメッセージを処理するようにすることです。ここでも S1 としましょう。 S2,...Sn は、S1 で構成されたキューにそれらを生成および格納できます。S1 のみがそれらすべてを処理する必要があります。したがって、S1 を除くすべてのサーバーの「MessageListener」部分を無効にしました。ただし、何らかの理由で、S1 はすべてを処理するわけではありません。他のリスナーが無効になっているにもかかわらず、キューがラウンド ロビン方式でメッセージを配信しているように感じます。2 つのサーバーがキューにアクセスしている場合、S1 はすべての代替メッセージを処理します。この問題を解決するための助けをいただければ幸いです。

注: 役立つ場合は、Spring JMS テンプレートを使用しており、JMS の Spring XML ベースの構成を完了しています。

ここに私のXML構成スニペットがあります

<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
<property name="brokerURL" value="tcp://ipaddress:61617"/>
</bean>
<bean id="cscoDest" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="STOCKS.CSCO" />
</bean>
<!--The message listener-->
<bean id="portfolioListener" class="my.test.jms.Listener">
</bean>
<!--Spring DMLC-->
<bean id="cscoConsumer" class="org.springframework.jms.listener.DefaultMessageListenerContainer102">
<property name="connectionFactory" ref="jmsConnectionFactory" />
<property name="destination" ref="cscoDest" />
<property name="messageListener" ref="portfolioListener" />
</bean>
<!--Spring JMS Template-->
<bean id="jmsTemplate" class="org.springframework.jms.core.JmsTemplate">
<property name="connectionFactory" ref="jmsConnectionFactory" />
</bean>
<bean id="stockPublisher" class="my.test.jms.SpringPublisher">
<property name="template" ref="jmsTemplate" />
<property name="destinations">
<list>
<ref local="cscoDest" />
</list>
</property>
</bean>

上記の構成はすべてのサーバーに存在します。「portfolioListener」Bean を無効にしています。これは、上記の例に従って S1 であるサーバーを除くすべてのサーバーで「cscoConsumer」のプロパティ マッピングです。しかし、それでもメッセージはスキップされています。ラウンドロビン方式。

4

2 に答える 2

0

私はそれを考え出した。私の悪い。サーバー上のコンシューマーから「MessageListener」プロパティをコメントアウトするだけでした。重要なのは、次のBeanを無効にすることです-

<bean id="cscoConsumer" class="org.springframework.jms.listener.DefaultMessageListenerContainer102">

ゲイリー、助けてくれてありがとう。

于 2013-05-21T06:29:36.940 に答える
0

「キューがラウンドロビンでメッセージを配布しているように感じます...」.

他のサーバーにアクティブなコンシューマがない場合、これは発生しません。ブローカーは、コンシューマーが存在する場合にのみメッセージを送信 (できます) します。

于 2013-05-20T11:55:52.360 に答える