Ответ
Для работы с RabbitMQ в Python существует несколько популярных библиотек, выбор которых зависит от требований к синхронности и уровню абстракции.
-
pikaЭто официальная клиентская библиотека для RabbitMQ на Python. Она предоставляет низкоуровневый доступ к протоколу AMQP 0-9-1 и поддерживает как блокирующий, так и неблокирующий режимы работы.pikaявляется хорошим выбором для большинства синхронных приложений.Пример синхронного подключения и отправки сообщения:
import pika
Установка соединения с RabbitMQ
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost')) channel = connection.channel()
Объявление очереди
channel.queue_declare(queue='hello')
Отправка сообщения
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!') print(" [x] Sent 'Hello World!'")
Закрытие соединения
connection.close()
2. **`aio-pika`**
Эта библиотека построена на базе `pika` и предназначена для асинхронной работы с RabbitMQ, используя `asyncio`. Она идеально подходит для высокопроизводительных асинхронных приложений, таких как веб-серверы на FastAPI или Starlette.
**Пример асинхронной отправки сообщения:**
```python
import asyncio
import aio_pika
async def send_message():
# Установка надежного асинхронного соединения
connection = await aio_pika.connect_robust("amqp://guest:guest@localhost/")
async with connection:
channel = await connection.channel() # Создание канала
# Отправка сообщения через обменник по умолчанию
await channel.default_exchange.publish(
aio_pika.Message(body=b"Hello World! (async)"),
routing_key="hello"
)
print(" [x] Sent 'Hello World! (async)'")
if __name__ == "__main__":
asyncio.run(send_message())
Альтернативы и высокоуровневые решения:
celery: Это мощный фреймворк для распределенных задач, который может использовать RabbitMQ (черезpikaилиkombu) в качестве брокера сообщений.Celeryпредоставляет абстракции для создания фоновых задач, планирования и мониторинга.kombu: Универсальная библиотека для обмена сообщениями, которая поддерживает различные брокеры, включая RabbitMQ.Kombuпредоставляет более высокоуровневый API по сравнению сpikaи часто используется как компонент в других проектах (например, вCelery).
Ответ 18+ 🔞
Так, слушай, про кролика этого, RabbitMQ, на питоне. Библиотек, блядь, как говна за баней, но реально пару штук выживают, остальное — мартышлюшка какая-то.
Первое, pika — это типа официальный, низкоуровневый дед. Прямо в протокол AMQP лезешь, как в душу. Для синхронного говна — то, что надо. Простой, как три копейки, но если накосячишь — сам виноват, пидарас шерстяной.
Смотри, как с ним работать:
import pika
# Подключаемся к кролику на локалхосте
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# Создаём очередь, если её нет — она появится, как геморрой от перенапряжения
channel.queue_declare(queue='hello')
# Шлём сообщение в очередь 'hello'
channel.basic_publish(exchange='', routing_key='hello', body='Hello World!')
print(" [x] Sent 'Hello World!'")
# Закрываем соединение, а то кролик сдохнет от открытых коннектов
connection.close()
Второе, aio-pika — это когда тебе мало просто послать сообщение, а надо, чтобы всё летало, как угорелое, в асинхронном режиме. Для FastAPI, всяких асинхронных монстров — идеально, ёпта.
Вот так это выглядит:
import asyncio
import aio_pika
async def send_message():
# Подключаемся надёжно, чтобы не отвалилось на полпути
connection = await aio_pika.connect_robust("amqp://guest:guest@localhost/")
async with connection:
channel = await connection.channel() # Канал создаём
# Шлём сообщение через обменник по умолчанию
await channel.default_exchange.publish(
aio_pika.Message(body=b"Hello World! (async)"),
routing_key="hello"
)
print(" [x] Sent 'Hello World! (async)'")
if __name__ == "__main__":
asyncio.run(send_message())
А ещё есть, блядь, высокоуровневые штуки, чтобы мозги не выносить:
celery— это вообще отдельная религия. Фреймворк для фоновых задач, который может использовать нашего кролика как брокера. Хочешь задачи в очередь пихать, чтобы они где-то там на других воркерах выполнялись — это твой выбор. Но готовься к тому, что настройка — это пиздец, иногда проще самому написать.kombu— универсальная обёртка над разными брокерами, включая RabbitMQ. Чуть выше уровнем, чемpika, часто внутриceleryиспользуется. Если не хочешь ковыряться в кишках AMQP — можешь попробовать, но иногда от этой абстракции только волнение ебать.
Короче, если просто и синхронно — бери pika. Если всё должно нестись асинхронно — aio-pika. А если задачи какие-то ебашить в фоне — смотри в сторону celery, но не ной, что сложно, сам лез, хитрая жопа.