Rabbit Publishing¶
RabbitBroker
also uses the unified publish
method to send messages.
However, in this case, an object of the aio_pika.Message
class (if necessary) can act as a message (in addition to str
, bytes
, dict
, pydantic.BaseModel
).
import asyncio
from propan import RabbitBroker
async def pub():
async with RabbitBroker() as broker:
await broker.publish("Hi!", queue="test", exchange="test")
asyncio.run(pub())
Basic arguments¶
The publish
method takes the following arguments:
message
: bytes | str | dict | Sequence[Any] | pydantic.BaseModel | aio_pika.Message = "" - message to sendexchange
: str | RabbitExchange | None = None - the exchange where the message will be sent to. If not specified - default is usedqueue
: str | RabbitQueue = "" - the queue where the message will be sent (since most queues use their name as the routing key, this is a human-readable version ofrouting_key
)routing_key
: str = "" - also a message routing key, if not specified, thequeue
argument is used
Message parameters¶
You can read more about all the flags in the RabbitMQ documentation
headers
: dict[str, Any] | None = None - message headers (used by consumers)content_type
: str | None = None - the content_type of the message being sent. Propan sets it automatically in most cases (used by consumers)content_encoding
: str | None = None - encoding of the message (used by consumers)persist
: bool = False - restore messages on reboot RabbitMQpriority
: int | None = None - the priority of the messagecorrelation_id
: str | None = None - message id, which helps to match the original message with the reply to it (Propan sets it automatically)reply_to
: str | None = None - the name of the queue where the response to the message should be sent (when using a blocking RPC, it is set automatically)message_id
: str | None = None - message ID (generated by RabbitMQ automatically)timestamp
: int | float | time delta | datetime | None - message sending time (set RabbitMQ automatically)expiration
: int | float | time delta | datetime | None - message lifetime (in seconds)type
: str | None = None - the type of message (used by consumers)user_id
: str | None - ID of the RabbitMQ user who sent the messageapp_id
: str | None - ID of the application that sent the message (used by consumers)
Send flags¶
Arguments for sending a message:
mandatory
: bool = True - the client is waiting for confirmation that the message will be placed in some queue (if there are no queues, return it to the sender)immediate
: bool = False - the client expects that there is a consumer ready to take the message to work "right now" (if there is no consumer, return it to the sender)timeout
: int | float | None = None - send confirmation time from RabbitMQ
RPC arguments¶
Also publish
supports common arguments for making RPC requests:
callback
: bool = False - whether to wait for a response to the messagecallback_timeout
: float | None = 30.0 - response waiting timeout. In case ofNone
- waits indefinitelyraise_timeout
: bool = FalseFalse
- return None on timeoutTrue
-TimeoutError
error in case of timeout