Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ActiveMQ+Spring+DefaultMessageListenerContainer-性能极差_Java_Activemq - Fatal编程技术网

Java ActiveMQ+Spring+DefaultMessageListenerContainer-性能极差

Java ActiveMQ+Spring+DefaultMessageListenerContainer-性能极差,java,activemq,Java,Activemq,我有一个带有以下配置的DefaultMessageListenerContainer设置: threadServiceListenerContainer(org.springframework.jms.listener.DefaultMessageListenerContainer) { maxConcurrentConsumers = 10 concurrentConsumers = 1 destinationName = 'releaseThr

我有一个带有以下配置的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个侦听器线程/使用者在最坏的情况下处于空闲状态,或者在最好的情况下是一次一个地运行

使用者处理时间未向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中修复的问题,