Redis
Stream: stream.notifications.jobs¶
NotificationPublisher.publish() → Redis XADD → stream.notifications.jobs → notifications-service (XREADGROUP).
Payload поля:
| Поле | Тип | Описание |
|---|---|---|
userId |
int | Получатель уведомления |
channel |
string | payments / security / kyc / system |
title |
string | Заголовок push-уведомления |
body |
string | Текст уведомления |
traceId |
string? | intent_id или иной trace |
data |
object? | Дополнительные данные для deep link |
badge |
int? | Badge counter для iOS |
Формат записи в stream: { "payload": "<JSON-строка>" }.
Конфиг из passwords.yaml¶
| Ключ | Формат | Назначение |
|---|---|---|
notificationsRedisUrl |
redis://:password@host:port/db |
URL Redis с авторизацией и номером базы |
Инициализация в server.dart: если notificationsRedisUrl не задан или не начинается с redis:// — публикация отключается (логируется verbose). NotificationsRedisClient.isInitialized возвращает false.
Best-effort¶
Сбой публикации в Redis (XADD error) не откатывает основную операцию (платёж, KYC, регистрацию). Ошибки логируются через session.log на уровне warning. Потеря push-уведомления не является критической ошибкой.
[PLAN] Redis Pub/Sub — Phase 2B¶
В Phase 2B планируется добавить Redis Pub/Sub (intent.{id}) для streamStatus() в PaymentEndpoint. Auth Center будет подписываться на канал и стримить статусы intent клиенту через Serverpod streams, вместо polling PM.