0

メッセージをキューに送信するために ActiveMQ 実装を使用しています。キューに問題がある場合、フェイルオーバー メカニズムを使用してすべてのメッセージを別のキューにリダイレクトしています。

ただし、私の要件は、最初のキュー内のメッセージがコンシューマーによって消費されるまで、コンシューマーによってフェールオーバー キュー メッセージが消費されないようにすることです。

このシナリオを実装する方法を誰かに提案できますか? 前もって感謝します。

ここに私のXML構成があります:

<bean id="jmsConnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory">
  <property name="brokerURL" value="tcp://172.16.121.146: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" />
  <property name="sessionAcknowledgeModeName" value="CLIENT_ACKNOWLEDGE"/>
</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>
4

1 に答える 1

0

ActiveMQ フェイルオーバー メカニズムは、現在のブローカーとの接続がダウンした場合に、クライアントが別の ActiveMQ ブローカーにフェイルオーバーできるようにするためにあります。

最初のキューが空になるまで 2 番目のキューがメッセージを配信してはならないという要件は非常に奇妙です。誰かがプラグを抜いて ActiveMQ サーバーを終了させたらどうなりますか? そのサーバーには未処理のメッセージが残っている可能性がありますが、それらを処理することはできません。

あなたが望むのは、ディスク領域を共有するマスタースレーブセットアップです(どこかのネットワーク共有)。その後、2 番目のブローカーは、マスター ブローカーが機能を停止した場所を取得できます。

于 2013-06-11T05:50:45.857 に答える