[英]concurrentConsumers for an ActiveMQ queue
我嘗試使用grails中的ActiveMQ隊列消息。 我為連接配置了一些spring bean,到目前為止一切都很好。
當我嘗試將concurrentConsumers
設置為8以上時,問題就出現了。似乎將8設置為一個客戶端的最大值 - 如果配置超過8,則ActiveMQ資源管理器仍會顯示8個隊列消費者。 如果我為具有8個以上concurrentConsumers
消費者的不同隊列配置兩個偵聽器,則ActiveMQ oszillate顯示的消費者數量,但總和始終為8。
我究竟做錯了什么? 配置示例顯示最多50個並發消費者...
這是我的配置,寫作groovy 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
}
由於Petter指出它不是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 - bingo! 如果我現在將cacheLevel設置為CACHE_CONSUMER,一切都按預期工作......
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.