2013-05-20 46 views
1

我們有一個要求,我將在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。但仍然以循環方式跳過消息。

+0

'我禁用了除S1'之外的所有服務器的MessageListener部分:您是如何禁用它的?可能它不是真的被禁用,這就是爲什麼你仍然看到循環分配! – brainOverflow

回答

0

「我感覺到隊列正在以循環方式分發消息......」。

如果在其他服務器上沒有活動的消費者認爲是不可能發生的;經紀人只能在有消費者的情況下發送消息。

+0

所以你的意思是說,隊列將不會將所有消息發送給一個唯一的消費者進行處理,儘管我禁用了所有其他消費者?我只需要一個消費者但同一隊列中有多個生產者。 –

+0

否;我說的是,如果其他消費者被禁用,經紀人會將所有消息發送給單個消費者。 –

+0

我已經添加了我的XML配置片段的線程opener.Please看看它。 –

0

我想通了。我的錯。我只是註釋掉從消費者servers.The鍵「消息監聽」屬性禁用以下豆 -

<bean id="cscoConsumer" class="org.springframework.jms.listener.DefaultMessageListenerContainer102"> 

非常感謝你加里您help.Appreciate它。