我們有一個要求,我將在n個服務器上部署一個應用程序,比如S1,S2,... Sn。有一個activeMQ隊列定義在其中一臺服務器,比如說S1.I已經配置了我的服務器來生成消息並將它們放置在S1中配置的同一隊列中。儘管所有服務器都配置爲使用相同的隊列來存儲生成的消息,但我的要求是隻有n個服務器中的一個處理來自隊列的所有消息,再次說明S1。因此,當所有服務器從S1, S2,... Sn可以生成並將它們存儲在S1上配置的隊列中,只有S1應該處理所有這些隊列。因此,我禁用了除S1之外的所有服務器的「MessageListener」部分。由於某些原因,S1不處理所有事情。我意識到,儘管其他Listener被禁用,隊列仍以循環方式分發消息。在兩個服務器正在訪問隊列的情況下,S1處理每個備用消息。任何幫助解決這個問題將不勝感激。ActiveMQ:消息監聽器不處理隊列中的所有條目
注意:如果可能有幫助,我使用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>
以上配置是存在於所有我servers.I'm禁用「portfolioListener」豆的,它在所有服務器中的「cscoConsumer」屬性映射除一個是根據上述例子的S1。但仍然以循環方式跳過消息。
'我禁用了除S1'之外的所有服務器的MessageListener部分:您是如何禁用它的?可能它不是真的被禁用,這就是爲什麼你仍然看到循環分配! – brainOverflow