ActiveMQ + Spring + DefaultMessageListenerContainer - 性能极差

时间:2011-04-27 01:47:46

标签: java activemq

我有一个DefaultMessageListenerContainer设置,其配置如下:

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个侦听器线程/消费者在最坏情况下处于空闲状态,或者最多只能在1个时间运行。

消费者处理时间未向JProfiler注册。消费者只是为memcached添加一个值,而memcached正在健康运行。

似乎我的消费者只是......坐在那里......

有什么想法?我重启了经纪人,没有性能差异。我重新启动了节点,没有性能差异。

我正在将Map注入经纪人。

这是我的connectionfactory bean:

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'
    }

1 个答案:

答案 0 :(得分:0)

我建议尝试几件事:将生产者流量控制设置为false并更改调度策略。尝试更改其中一个或两个以查看是否有帮助。我们在ActiveMQ(运行嵌入OpenEJB)中遇到了性能问题,但最终让一切运行顺利。

要使用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 persistence切换到KahaDB持久性。