2012-08-14 110 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