【发布时间】:2013-05-21 14:29:36
【问题描述】:
我们有一个要求,我将在 n 台服务器上部署应用程序,比如 S1、S2 ......Sn。在其中一台服务器上定义了一个 activeMQ 队列,比如 S1。我有将我的服务器配置为生成消息并将它们放置在 S1 中配置的同一队列中。虽然所有服务器都配置为使用相同的队列来存储生成的消息,但我的要求是只有 n 个服务器中的一个处理来自队列的所有消息,再次假设为 S1。所以虽然所有服务器范围从 S1, S2,...Sn 可以在 S1 上配置的队列中生成和存储它们,只有 S1 应该处理所有它们。因此我禁用了除 S1 之外的所有服务器的“MessageListener”部分。但出于某种原因,S1 并未处理所有内容。我感觉到队列正在以循环方式分发消息,尽管其他侦听器被禁用。在两台服务器访问队列的情况下,S1 会处理每条备用消息。任何解决此问题的帮助将不胜感激。
注意:如果有帮助,我正在使用 Spring JMS 模板并为 JMS 完成基于 Spring XML 的配置。
这是我的 XML 配置 sn -p
<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,并且它在所有服务器中的“cscoConsumer”中的属性映射,除了根据上述示例的 S1 之外。但仍然有消息以循环方式被跳过。
【问题讨论】:
-
I have disabled the MessageListener part of all the servers except S1:你是如何禁用它的?可能它并没有真正被禁用,这就是为什么你仍然看到循环分发!
标签: activemq spring-jms jmstemplate