Producer
Producer
from flask_rmq import Producer
producer = Producer(queue='orders')
producer.publish('{"order_id":42}')str кодируется как UTF-8, bytes передаётся без изменений. Словари не сериализуются автоматически: используйте json.dumps, чтобы контракт сообщения оставался явным.
По умолчанию создаются BasicProperties(content_type='application/json', delivery_mode=2). Даже если custom properties не содержат delivery_mode, Flask-RMQ установит persistent mode.
Маршрутизация через exchange
events = Producer(exchange='domain.events', queue='')
events.publish(body=b'...', routing_key='orders.created')Пустая очередь отключает её проверку. mandatory=True и publisher confirms не позволяют незаметно потерять unroutable или отклонённое брокером сообщение.
Объявление очереди
- Строковое имя проверяется через
queue_declare(passive=True)— очередь должна быть созданаrmq setup. QueueConfigактивно объявляет очередь с durability и DLX arguments.- Результат кэшируется для конкретного channel; после reconnect новый channel проверяется повторно.
queue = QueueConfig(
'orders',
dead_letter_exchange='orders.dlx',
dead_letter_routing_key='orders.failed',
)
producer = Producer(queue=queue)Producer можно использовать как декоратор. str/bytes публикуются и возвращаются, None пропускает отправку, другие типы вызывают TypeError.
При transport/channel error соединение сбрасывается и выполняется ровно одна повторная попытка. Далее исключение возвращается вызывающему коду. Для гарантированной доставки при долгой недоступности брокера используйте transactional outbox.