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 代理。

您要求在第一个队列为空之前第二个队列不应传递消息是非常奇怪的。如果有人通过拔掉插头来终止 ActiveMQ 服务器会发生什么?该服务器上可能仍有未处理的消息,但您无法处理它们。

您想要的是一个共享磁盘区域(某处的网络共享)的主从设置。然后第二个代理可以在主代理停止工作的地方接手。

于 2013-06-11T05:50:45.857 回答