Мне нужна высокопроизводительная шина сообщений для моего приложения, поэтому я оцениваю производительность ZeroMQ
, RabbitMQ
и Apache Qpid
. Для измерения производительности я запускаю тестовую программу, которая публикует, скажем, 10 000 сообщений, используя одну из реализаций очереди сообщений, и запускаю другой процесс на той же машине для потребления этих 10 000 сообщений. Затем я записываю разницу во времени между первым опубликованным сообщением и последним полученным сообщением.
Ниже приведены параметры, которые я использовал для сравнения.
RabbitMQ
: Я использовал обмен типа "fanout" и очередь с конфигурацией по умолчанию. Я использовал клиентскую библиотеку RabbitMQ C. ZeroMQ
: Мой издатель публикует на tcp://localhost:port1
с ZMQ_PUSH
сокетом, Мой брокер слушает на tcp://localhost: port1
и пересылает сообщение на tcp://localhost:port2, а мой потребитель слушает на tcp://localhost:port2
, используя ZMQ_PULL
сокет. Я использую брокер вместо одноранговой связи в ZeroMQ
, чтобы сравнение производительности было справедливым по отношению к другим реализациям очередей сообщений, использующим брокеры. Qpid
C++ брокер сообщений: Я использовал обмен типа "fanout" и очередь с конфигурацией по умолчанию. Я использовал клиентскую библиотеку Qpid C++. Ниже приведены результаты производительности:
RabbitMQ
: для получения 10 000 сообщений требуется около 1 секунды. ZeroMQ
: Для получения 10 000 сообщений требуется около 15 миллисекунд. Qpid
: Для получения 10 000 сообщений требуется около 4 секунд. Вопросы:
RabbitMQ
или Qpid
для повышения производительности? Примечание:
Тесты проводились на виртуальной машине с двумя выделенными процессорами. Результат может отличаться для различных аппаратных средств, однако меня в основном интересует относительная производительность продуктов MQ.