Ответ
Для работы с 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
).