Java ActiveMQ+Spring+DefaultMessageListenerContainer-性能极差
我有一个带有以下配置的DefaultMessageListenerContainer设置:Java ActiveMQ+Spring+DefaultMessageListenerContainer-性能极差,java,activemq,Java,Activemq,我有一个带有以下配置的DefaultMessageListenerContainer设置: threadServiceListenerContainer(org.springframework.jms.listener.DefaultMessageListenerContainer) { maxConcurrentConsumers = 10 concurrentConsumers = 1 destinationName = 'releaseThr
threadServiceListenerContainer(org.springframework.jms.listener.DefaultMessageListenerContainer) {
maxConcurrentConsumers = 10
concurrentConsumers = 1
destinationName = 'releaseThread'
pubSubDomain = false
connectionFactory = ref("connectionFactory")
messageListener = ref('threadServiceMessageListener')
}
代理中有3000条积压的消息。消耗率似乎是2/秒。我已经将JProfiler连接到Java节点,但看起来10个侦听器线程/使用者在最坏的情况下处于空闲状态,或者在最好的情况下是一次一个地运行
使用者处理时间未向JProfiler注册。消费者只是向memcached添加了一个值,memcached运行正常
看来我的消费者只是。。。坐在那里
有什么想法吗?我重新启动了代理,没有性能差异。我已重新启动节点,没有性能差异
我正在把Map注入经纪人
这是我的ConnectionFactorybean:
connectionFactory(org.springframework.jms.connection.CachingConnectionFactory, ref("amqConnectionFactory")) {
exceptionListener = {com.zipwhip.jms.JmsExceptionListener jmsExceptionListener -> }
sessionCacheSize = 100
}
amqConnectionFactory(org.apache.activemq.ActiveMQConnectionFactory) {
brokerURL = 'tcp://localhost:61616'
}
我建议尝试两件事:将producerflowcontrol设置为false并更改调度策略。试着改变其中一个或两个,看看是否有帮助。我们在使用OpenEJB嵌入运行ActiveMQ时也遇到过性能问题,但最终使一切顺利运行 要使用activemq.xml更改这些设置,请使用以下命令:
<destinationPolicy>
<policyMap>
<policyEntries>
<policyEntry queue=">" producerFlowControl="false" enableAudit="false" >
<dispatchPolicy>
<roundRobinDispatchPolicy />
</dispatchPolicy>
</policyEntry>
</policyEntries>
</policyMap>
</destinationPolicy>
另外,我们从ActiveMQ 4.x升级到5.3.1,并从JDBC/journaled持久化切换到KahaDB持久化。我实际上担心我可能试图通过1个连接输送太多的流量。你们用的是CachingConnectionFactory吗?您有多个底层连接吗?我们通常有一个生产者和多个消费者。不过,我们使用的是J2EE,而不是Spring。发送到activeMQ时,我们要做的一件事是将UseAncyncSend设置为true。队列连接工厂是我们通过openejb从ActiveMQ获得的默认工厂。您使用的是什么版本的AMQ?这听起来像是5.4中修复的问题,