Ответ
Отправка (publishing) сообщений в RabbitMQ на Python чаще всего выполняется с помощью библиотеки pika. Процесс состоит из установления соединения, создания канала и публикации сообщения в точку обмена (exchange).
Ключевые шаги:
- Установить соединение с RabbitMQ.
- Создать канал — легковесное соединение внутри основного.
- Объявить очередь (
queue_declare), чтобы убедиться в её существовании. Если очередь не существует, она будет создана. Указаниеdurable=Trueсохранит очередь при перезапуске брокера. - Опубликовать сообщение (
basic_publish) в точку обмена. Пустая строкаexchange=''означает использование default exchange, который направляет сообщение в очередь, чьё имя совпадает сrouting_key.
Пример кода (Publisher)
Использование with гарантирует корректное закрытие соединения даже при ошибках.
import pika
# Параметры подключения
connection_params = pika.ConnectionParameters('localhost')
# Устанавливаем соединение (контекстный менеджер закроет его автоматически)
try:
with pika.BlockingConnection(connection_params) as connection:
# Создаем канал
channel = connection.channel()
# Объявляем очередь. idempotent-операция.
# durable=True делает очередь устойчивой к перезапуску RabbitMQ
channel.queue_declare(queue='hello_queue', durable=True)
message_body = 'Hello, RabbitMQ!'
# Публикуем сообщение
channel.basic_publish(
exchange='', # Default exchange
routing_key='hello_queue', # Имя очереди
body=message_body.encode('utf-8'), # Сообщение должно быть в байтах
properties=pika.BasicProperties(
delivery_mode=2, # Сделать сообщение персистентным
)
)
print(f" [x] Sent '{message_body}'")
except pika.exceptions.AMQPConnectionError as e:
print(f"Failed to connect to RabbitMQ: {e}")
Важно:
- Персистентность: Чтобы сообщения не терялись при перезапуске брокера, и очередь (
durable=True), и сами сообщения (delivery_mode=2) должны быть помечены как персистентные.