RabbitMQ - одна из реализаций сервера для обмена сообщениями на базе протокола AMPQ(http://en.wikipedia.org/wiki/Advanced_Message_Queuing_Protocol, http://amqp.org/). Подробно описывать его работу, достоинства и недостатки я сейчас не буду. Цель этого поста - сравнить две библиотеки для работы с ним с помощью Python. На самом деле, этих библиотек значительно больше, краткий список их доступен на сайте RabbitMQ: http://www.rabbitmq.com/devtools.html#python-dev.

Сравнивал по принципу "нужно это, это и еще вооон то". Детальное описание фич на сайте - ниже только те, которые были критичные для меня.

Pika - Python AMQP Client Library - изначально разрабатывалась для работы с RabbitMQ и предоставляет собой реализацию протокола AMQP 0-9-1, в следствии чего, все примеры работы с RabbitMQ на Python в официальной документации написаны с использованием этой библиотеки.

Kombu известна тем, кто работал с OpenStack.

Небольшая сравнительная таблица с комментариями:


pika kombu
Репозиторий https://github.com/pika/pika https://github.com/ask/kombu
Дата последнего обновления 19.02.2012 21.02.2012
Последняя версия 0.9.6-pre0 2.1.0
Лицензия MPL 1.1 / GLP 2 BSD License / As is
Подход к написанию кода простой и понятный код явно прослеживается Publish–subscribe pattern
Поддержка SSL +(последняя версия из репозитория) +(последняя версия из репозитория)

Интеграция с Django из коробки
(есть документация и примеры)

- +
Асинхронная работа + +
Поддрежка Tornado/Twisted +/+ -/-
Кеширование из коробки - +
Поддержка разных транспортов для очереди сообщений ampq

amqplib
librabbitmq
pika
pika2
memory
redis
beanstalk
mongodb
couchdb
django (django models)

Документация +, примеры работы с RabbitMQ на сайте “кролика” +, примеры кода более сложные, чем “hello world”

 

В целом, после незначительного использования обоих библиотек (читать как “написал “hello world”” и чтения документации пришел к таким выводам:

 

  • для простых задач pika предпочтительнее, уровень вхождения ниже;
  • kombu имеет больше всевозможных настроек и легче поддается расширению;
  • производительность обоих библиотек на очереди до 100 сообщений была примерно одинакова.

 

 

Небольшой пример кода: https://github.com/e0ne/BlogSamples/tree/master/rabbitmq-sample

 

P.S. Хочется посмотреть еще celery и py-ampqlib, но пока до них руки не дошли.

P.S.S. Комментарии, замечания и дополнения приветствуются.

 


Comments are closed