Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Путь
Путь одной записи потока через сервис RustStream: добавление, чтение группой, доставка,
обработчик, ответ и XACK.
Схема текстом
- XADD поле _payload и поля h: → XREADGROUP до 64 записей, клиентом чтения
- XREADGROUP до 64 записей, клиентом чтения → RedisMessage из полей: нагрузка и заголовки
- RedisMessage из полей: нагрузка и заголовки → Диспетчеризация цикл рантайма или его воркеры
- Диспетчеризация цикл рантайма или его воркеры → Декодирование нагрузки в тип обработчика
- Декодирование нагрузки в тип обработчика → Обработчик подписчика async fn под #[subscriber]
- Обработчик подписчика async fn под #[subscriber] → Ответ XADD через соединение пула
- Ответ XADD через соединение пула → Завершение решает исход
- Завершение решает исход → XACK через соединение пула
Чтение возвращает до 64 записей за один обмен с сервером, и подписка отдаёт их по одной, прежде
чем читать снова. Пакетный обработчик вместо этого читает столько записей, сколько составляет
размер его пакета. Если в потоке нет ничего нового, чтение блокируется на интервал block
подписки, по умолчанию на пять секунд.
Каждая запись становится RedisMessage: поле _payload -
полезная нагрузка, а каждое поле h: - заголовок. Рантайм декодирует полезную нагрузку и
вызывает обработчик.
Ответ кодируется и публикуется командой XADD через соединение пула, а доставка завершается
после него. Запись, прочитанная из списка, и сообщение Pub/Sub начиная с доставки проходят тот же
путь, но завершаются так, как принято в их форме. Это показывает страница
Завершение.