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