2013-03-22 60 views
0

我的環境是Spring 3.0.5,ActiveMQ 5.8。 在servlet.xml我指定了10個併發消費者。但是,ActiveMQ的Web管理控制檯顯示= 20Spring + ActiveMQ:併發工作者之間不匹配

<bean id="singleConnectionFactory" 
    class="org.springframework.jms.connection.SingleConnectionFactory"> 
    <property name="targetConnectionFactory" ref="connectionFactory" /> 
    <property name="reconnectOnException" value="true" /> 
</bean> 

<bean id="msgListenerContainer" 
    class="org.springframework.jms.listener.SimpleMessageListenerContainer"> 
    <property name="connectionFactory" ref="singleConnectionFactory" /> 
    <property name="destination" ref="emailRequestQ" /> 
    <property name="messageListener" ref="emailRequestMessageListener" /> 
    <property name="concurrentConsumers" value="10" /> 
</bean> 

「的消費者數量」試圖找出如果我的配置是失去了一些東西? enter image description here

+0

你的配置是完全沒問題的。你有多個實例在運行嗎?你有多個聽衆的實例嗎?嘗試通過jconsole連接到ActiveMQ。它有一些關於誰連接到什麼隊列等的信息。 – 2013-03-25 05:29:40

+0

如果用org.apache.activemq.ActiveMQConnectionFactory替換spring singleconnectionFactory,那麼行爲如何? – willome 2013-04-30 08:52:10

回答

0

可能有一些事情導致這種情況發生。例如,如果實際上使用代碼中的構造函數實例化Bean,而不是@Autowiring,則會創建兩個實例。

此外,如果消費者數量較多,當前消費者的數量可能不準確,然後隨着消費者的閒置而減少。我建議切換到DefaultMessageListenerContainer。這將允許你玩maxConcurrentConsumers財產和從容器訪問一些額外的數據:

@Autowired 
DefaultMessageListenerContainer container; 
... 
container.getActiveConsumerCount(); 
container.getConcurrentConsumers();