2013-12-24 4 views
0

Код в https://github.com/maxant/share/blob/master/DBJMSPerf/src/JMSWriter.java пишет BytesMessages локальному серверу ActiveMQ.Улучшение производительности записи ActiveMQ

Я управляю только 200 сообщениями в секунду (< 5 миллисекунд за сообщение).

Используя код на https://github.com/maxant/share/blob/master/DBJMSPerf/src/DBWriter.java, который следует очень похожей схеме, я могу написать более 500 сообщений в секунду для базы данных.

В обоих случаях я обрабатываю транзакции самостоятельно, потому что я хочу имитировать фиксацию после каждого сообщения, и я повторно использую соединение, так как хочу имитировать объединение пулов.

Я использую режим постоянной доставки в примере JMS, потому что я пытаюсь проанализировать конструкцию с высокой доступностью - сообщения не могут быть потеряны.

В http://activemq.apache.org/performance.html они цитируют сообщения в десять раз быстрее, чем я могу.

Как повысить производительность сервера ActiveMQ?

+0

Использование OpenMQ (https://mq.java.net/) производительность еще хуже, позволяя мне писать около 150 сообщений в секунду. –

+0

Удаление режима постоянной доставки и транзакций из JMSWriter повышает производительность, так что он может записывать до 300 сообщений в секунду, но все же гораздо меньше, чем рекламируется. –

ответ

0

Вам необходимо использовать пул соединений для ускорения работы при повторном создании всех ресурсов JMS на отправляемое сообщение, и это медленно.

В пулах соединений на основе JMS очень часто встроен пул сессий/потребителей/производителей, и, следовательно, вы можете сохранить код как есть.

У Apache ActiveMQ есть пул, который вы можете использовать, а также есть один из Spring Framework.

+0

Спасибо, я не понимал, что сессия и MessageProducer также могут быть объединены. Я добавил Apache commons-pool-1.6.jar и activemq-jms-pool-5.9.0.jar в CP, и эти три строки кода: \t PooledConnectionFactory pcf = new PooledConnectionFactory(); pcf.setConnectionFactory (connectionFactory); pcf.start(); final Connection connection = pcf.createConnection(); Производительность составляет около 300 сообщений в секунду. Насколько мне известно, все еще слишком медленно. –

+0

На самом деле, после нескольких тестов я бы сказал, что производительность больше походит на 400 сообщений в секунду. Но все равно ничего подобного цитируемым цифрам. –

Смежные вопросы