在实际队列开始传递消息之前,故障转移队列不应传递消息

时间:2013-06-10 14:25:30

标签: tomcat7 activemq spring-jms

我正在使用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>

1 个答案:

答案 0 :(得分:0)

如果与当前代理的连接中断,ActiveMQ故障转移机制可让客户端故障转移到另一个ActiveMQ代理。

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

你想要的是一个共享磁盘区域的master slave setup(某处的网络共享)。然后第二个经纪人可以在主经纪人停止工作的地方找到。