2012-08-14 100 views
4

我嘗試使用grails中的ActiveMQ隊列消息。我爲連接配置了一些彈簧豆,並且一切都很好。concurrentMonsumers爲ActiveMQ隊列

當我嘗試將concurrentConsumers設置爲8以上時,問題就開始了。看起來8被設置爲一個客戶端的最大值 - 如果我配置了8個以上,ActiveMQ瀏覽器仍然顯示8個消費者隊列。如果我爲超過8個不同隊列配置兩個監聽器,其中顯示的消費者數量超過8個,但總和總是8.

我在做什麼錯?配置示例顯示多達50 concurrentConsumers ...

這裏是我的配置,寫成常規DSL,我想這是讀它沒有問題... ...

jmsFactory(org.apache.activemq.pool.PooledConnectionFactory) { bean -> 
    bean.destroyMethod = "stop" 
    connectionFactory = { org.apache.activemq.ActiveMQConnectionFactory cf -> 
     brokerURL = "tcp://localhost:61616" 
    } 
} 
jmsTemplate(org.springframework.jms.core.JmsTemplate) { 
    connectionFactory = jmsFactory 
} 
jmsMessageListener(org.springframework.jms.listener.adapter.MessageListenerAdapter, ref("messageService")) { 
    defaultListenerMethod = "onMessage" 
} 
jmsContainer(org.springframework.jms.listener.DefaultMessageListenerContainer) { 
    connectionFactory = jmsFactory 
    concurrency="10" 
    concurrentConsumers="15" 
    destinationName = "demoQueue" 
    messageListener = jmsMessageListener 
    transactionManager = ref("transactionManager") 
    autoStartup = false 
}  
jmsMessageListener2(org.springframework.jms.listener.adapter.MessageListenerAdapter, ref("messageService")) { 
    defaultListenerMethod = "onMessage2" 
} 
jmsContainer2(org.springframework.jms.listener.DefaultMessageListenerContainer) { 
    connectionFactory = jmsFactory 
    destinationName = "demoQueue2" 
    messageListener = jmsMessageListener2 
    transactionManager = ref("transactionManager") 
    autoStartup = false 
}  
+2

不確定它是否有幫助,但您應該設置「併發性」或「concurrentConsumers/maxConcurrentConsumers」,因爲它們重疊。 concurrency =「10-15」將設置concurrentConsumers = 10,maxConcurrentConsumers = 15等。 – 2012-08-15 04:40:18

+0

thanx。給它一個嘗試 - 沒有什麼改變...... :-( – rdmueller 2012-08-15 06:27:45

+1

連接到jconsole到activemq,看看這是否與activemq的web控制檯中的不匹配,在消費者數量上沒有任何定義活動mq中的8個消費者最大值或春天,據我所知,否則,我不知道 – 2012-08-15 13:06:43

回答

1

由於皮特指出,不能成爲ActiveMQ或Spring配置的問題,我在java中創建了一個spring消費者,並試圖爲我的grails消費者找到差異。

Java消費者按預期工作,但不使用事務管理器。所以我從我的grails confid中刪除了事務管理器,它工作正常!

然後我GOOGLE了一點點,發現了一個暗示,cacheLevel設置:http://static.springsource.org/spring/docs/2.0.8/api/org/springframework/jms/listener/DefaultMessageListenerContainer.html#setCacheLevel%28int%29

的cacheLevel設置爲none當使用一個事務管理器 - 賓果!如果我現在將cacheLevel設置爲CACHE_CONSUMER,則一切按預期工作...

+1

好調查。交易經理有一個討厭的習慣,想要自己的方式事情。 – 2012-08-16 09:10:28