Redis Publishing¶
To send messages, RedisBroker
also uses the unified publish
method.
import asyncio
from propan import RedisBroker
async def pub():
async with RedisBroker() as broker:
await broker.publish("Hi!", channel="test")
asyncio.run(pub())
Basic arguments¶
The publish
method accepts the following arguments:
message
: bytes | str | dict | Sequence[Any] | pydantic.BaseModel - message to sendchannel
: str = "" - channel to which the message will be sent.
Message Parameters¶
Redis by default sends a message in the form of raw bytes'. So **Propan** uses its own message transmission format:
when calling the
publish` method, json is sent to Redis with the following fields:
{
"data": "",
"headers": {},
"reply_to": ""
}
Independently, you can set and use the headers of the sent message within your application (the content-type
is automatically set there, according to which Propan determines how to decode the received message)
headers
: dict[str, Any] | None = None - headers of the message being sent (used by consumers)
If Propan receives a message sent using another library or framework (or just a message in a different format),
the entire body of this message will be perceived as the data
field of the received message, and the content-type
will be recognized automatically.
At the same time, RPC requests will not work, since there is no reply_to
field in the incoming message.
RPC arguments¶
Also publish
supports common arguments for making RPC requests:
reply_to
: str = "" - which channel to send the response to (used for asynchronous RPC requests)callback
: bool = False - whether to expect a response to the messagecallback_timeout
: float | None = 30.0 - timeout waiting for a response. In the case ofNone
- waits indefinitelyraise_timeout
: bool = FalseFalse
- return None in case of timeoutTrue
- errorTimeoutError
in case of timeout