Хорошая библиотека Python для AMQP [закрыта]

Можете ли вы порекомендовать, какую библиотеку Python использовать для доступа к AMQP (RabbitMQ)? Из моих исследований pika кажется предпочтительным.


person Meh    schedule 17.02.2011    source источник


Ответы (4)


Pika является рекомендуемой библиотекой RabbitMQ, и также упоминается py-ampqlib. В зависимости от того, для чего вы используете Rabbit, вам также может понадобиться Celery (клиентская библиотека, предназначенная для распределенной организации очередей). ).

Опять же, в зависимости от использования, вы также можете посмотреть Apache qpid, который является полным клиентом на основе AMPQ. серверная альтернатива RabbitMQ. Одна вещь, которая привлекла нас в qpid, заключалась в том, что он, казалось, имел лучшую устойчивость к сбоям сервера (очереди сохраняются распределенным образом).

person SteveMc    schedule 17.02.2011
comment
Я только что обнаружил, что сельдерей создает очередь для каждой задачи, что является разочаровывающей слабостью celeryproject .org/docs/userguide/tasks.html#amqp-result-backend - person Michael Dillon; 26.04.2011
comment
Мы не обнаружили, что это проблема; наши задачи использования быстро расходуются (мы очень редко ожидаем, что что-то будет сидеть без дела дольше нескольких секунд). Это также может быть связано с реализацией - там конкретно упоминается RabbitMQ. Мне было бы интересно узнать, не вызывает ли это у вас затруднений. - person SteveMc; 26.04.2011
comment
Никогда не пробовал сельдерей, потому что он просто не вписывался в общую архитектуру AMQP. Очередь сообщений предназначена не только для распределения задач по пулам рабочих. - person Michael Dillon; 27.04.2011
comment
Хорошо, приятно знать. Да... главный плюс сельдерея в том, что он требует много кодирования. Если мы обнаружим проблемы, мы можем закончить тем, что напишем тонкую обертку вокруг pika, как это сделали вы. Удачи тебе с твоим проектом! - person SteveMc; 27.04.2011
comment
На pika есть много проблем, таких как сбой публикации большого сообщения, сбой тайм-аута пульса; - person hupantingxue; 16.09.2014
comment
Celery можно легко настроить для использования пользовательских очередей и отправки задач в эти очереди вместо создания одной очереди для каждой задачи. - person danius; 04.12.2014
comment
Старый сервер результатов amqp создает одну очередь для каждой задачи, это должно было иметь сервер результатов на основе amqp, который ведет себя как база данных (любой процесс может получить результат). Старый сервер результатов amqp, вероятно, никогда не следует использовать в производстве. Однако серверная часть результатов rpc непостоянна, создает одну очередь для каждого клиента и должна использоваться, если вам нужны вызовы в стиле RPC. - person asksol; 11.04.2016

Мои собственные исследования привели меня к выводу, что правильной библиотекой для использования будет Kombu, так как это также то, что Celery (упомянутый @SteveMc) перешел на. Я также использую RabbitMQ и успешно использовал Kombu с бэкэндом amqplib по умолчанию.

Kombu также поддерживает другие транспорты за тем же API. Полезно, если вам нужно заменить AMQP или добавить что-то вроде Redis. Хотя не пробовал.

Примечание: Kombu в настоящее время не поддерживает последнюю версию pika (если вы по какой-то причине полагаетесь на нее). В настоящее время поддерживается только 5.2.0, это меня укусило некоторое время назад.

person dgorissen    schedule 09.03.2011
comment
Вы должны обновить этот ответ сейчас, когда, согласно проблеме, на которую вы ссылаетесь, вы обнаружили свою ошибку и что сломан не Комбу. - person Brandon Rhodes; 28.03.2011
comment
@Брэндон Крейг Роудс: готово :) - person dgorissen; 28.03.2011
comment
stackoverflow.com/questions/48524536/ это обеспечивает сравнение между kombu и pika и, вероятно, поможет будущим пользователям больше, чем просто "использовать эту библиотеку" - person Spcogg the second; 09.11.2020

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

Но помните, что если вы придерживаетесь одной и той же версии протокола AMQP, эти библиотеки будут взаимодействовать. Из-за того, что тестировались разные библиотеки, у нас были части прототипа приложения, работающего с pika, kombu и py-amqplib.

Прочитайте этот блог о замене amqplib на pika для понимания, почему это хорошая идея.

person Michael Dillon    schedule 26.04.2011

В настоящее время я занимаюсь тем, чтобы наше приложение Python использовало SSL. Я изначально не разрабатывал это приложение (и я не являюсь разработчиком Python), поэтому я мало что о нем знаю, но, похоже, мы используем Клиент AMQP в Twisted.

QPid также имеет один. Опять же, я не знаю качество.

person Travis Stevens    schedule 17.02.2011
comment
Я бегло взглянул на txAMQP, но разработка, похоже, застопорилась. - person dgorissen; 28.03.2011