Redis Publishing¶
Для отправки сообщений RedisBroker
также использует унифицированный метод publish
.
import asyncio
from propan import RedisBroker
async def pub():
async with RedisBroker() as broker:
await broker.publish("Hi!", channel="test")
asyncio.run(pub())
Базовые аргументы¶
Метод publish
принимает следующие аргументы:
message
: bytes | str | dict | Sequence[Any] | pydantic.BaseModel - сообщение для отправкиchannel
: str = "" - channel, куда будет отправлено сообщение.
Параметры сообщения¶
Redis по умолчанию отправляет сообщение в виде сырых bytes
. Propan же использует собственный формат передачи сообщения:
при вызове метода publish
в Redis отправляется json со следующими полями:
{
"data": "",
"headers": {},
"reply_to": ""
}
Самостоятельно вы можете выставить и использовать в рамках своего приложения заголовки отправляемого сообщения (там же автоматически выставляется content-type
, по которому Propan определяет, как декодировать полученное сообщение)
headers
: dict[str, Any] | None = None - заголовки отправляемого сообщения (используются потребителями)
Если Propan получает сообщение, отправленное с помощью другой библиотеки или фреймворка (или просто сообщение другого формата),
все тело этого сообщение будет воспринято как поле data
принимаемого сообщения, а content-type
будет распознан автоматически.
При этом RPC запросы не будут работать, так как во входящем сообщении нет поля reply_to
.
RPC аргументы¶
Также publish
поддерживает общие аргументы для создания RPC запросов:
reply_to
: str = "" - в какой channel отправить ответ (используется для асинхронных RPC запросов)callback
: bool = False - ожидать ли ответ на сообщениеcallback_timeout
: float | None = 30.0 - таймаут ожидания ответа. В случаеNone
- ждет бесконечноraise_timeout
: bool = FalseFalse
- возвращать None в случае таймаутаTrue
- ошибкаTimeoutError
в случае таймаута