Эта страница переведена с английского языковой моделью. При любом расхождении верен английский оригинал.
Транспорты
Redis передаёт сообщения тремя способами: поток хранит записи для групп потребителей, список отдаёт каждую запись одному потребителю, канал не хранит ничего.
Схема текстом
- XADD → Поток хранит записи
- LPUSH → Список до извлечения
- PUBLISH → Канал не хранит
- Поток хранит записи → Группа billing
- Поток хранит записи → Группа audit
- Список до извлечения → Потребители по очереди
- Канал не хранит → Клиент A
- Канал не хранит → Клиент B
- Подписался позже: не увидит
- Группа читает все записи
- Запись получает один потребитель
Поток - журнал, в который записи только добавляются. XADD добавляет запись под идентификатором,
который назначает сервер, и запись хранится, пока поток не усекут. Группа потребителей читает
поток со своим курсором, поэтому каждая из двух групп получает все записи. Внутри одной группы
каждая запись достаётся одному потребителю. Как группа учитывает доставленное, показывает страница
Группы.
Список - очередь. Производитель добавляет запись командой LPUSH, потребитель извлекает её с другого
конца, и извлечённая запись из Redis исчезает. Как надёжный список хранит запись, пока обработчик
не завершит её доставку, показывает страница Очереди.
Канал ничего не хранит. PUBLISH передаёт сообщение клиентам, подписанным в этот момент, а
клиент, который подпишется позже, его не увидит. Это показывает страница Рассылка.
Сервис читает каждый транспорт через собственный дескриптор:
RedisStream,
RedisList и
RedisPubSub. Обработчик - одна и та же функция
#[subscriber] для всех трёх. Различается смысл подтверждения, как показывает страница
Завершение.