ActiveMQ + Spring + DefaultMessageListenerContainer - крайне низкая производительность - PullRequest
0 голосов
/ 27 апреля 2011

У меня есть настройка 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 в брокер.

Вот мой beanfactory 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 голосов
/ 27 апреля 2011

Я бы порекомендовал попробовать несколько вещей: установить управление потоком производителя на 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 / сохраняемого журнала на постоянство KahaDB.

...