消息运营工作台
Admin 路由 /system/notifications/operations 提供应用级消息运行视图。工作台只展示租户与当前 App 范围内的脱敏业务投影,不暴露 River Args、设备 Token、完整载荷、凭据、堆栈或厂商响应正文。
四个可恢复 Tab
Tab、筛选和分页写入 URL,刷新或分享站内地址后可以恢复。页面可见且存在未完成任务时每 15 秒刷新;浏览器页签隐藏后暂停,手动刷新始终可用。
运行状态
发布运行可能是 scheduled、queued、running、completed、completed_with_failures、failed、cancelled 或 expired。
队列任务可能是 scheduled、queued、running、retry_wait、succeeded、failed 或 cancelled。River 表是实时调度事实源,工作台读取的是经过租户和 App 隔离的业务投影;后台对账任务会修复进程异常退出造成的状态差异。
安全重试规则
- 只重试已终止且服务端返回
retryable=true的任务。 transient和throttled可在自动尝试耗尽后人工重试。auth_config_error必须先到推送渠道修复配置并通过预检。unknown_after_write可能已经到达厂商,只允许单条操作,并显式确认重复通知风险。- 每次批量请求最多 100 条;服务端逐条返回接受或拒绝原因。
- 重试创建新任务并关联原任务,原运行和尝试历史不会被覆盖。
运行中、尚未到期的计划任务、已取消或已过期消息不能手动重试。工作台不提供编辑任务参数、强制终止运行中任务或直接更新 River 记录的功能。
推荐排障顺序
- 在“概览”确认队列深度、最老等待时间、P95 排队延迟和故障数量是否持续增长。
- 在“发布运行”定位流水线停在发布、扇出还是设备投递,并核对收件人、已评估、投递与跳过计数。
- 在“队列任务”查看 task kind、尝试次数、下一次重试、归一错误码和 Trace ID。
- 厂商鉴权失败时先修复渠道,不要连续重放投递。
- 需要完整调用链时,用 Trace ID 到 OpenTelemetry、Loki 或 Tempo 查询;Admin 只保留安全摘要。
权限
按钮可见性不能替代服务端授权。所有查询在 SQL 层同时过滤 tenant 和 app;重试操作还会记录操作者、原任务、新任务和审计事件。
保留与监控
任务、尝试和消息运行明细保留 90 天;日聚合保留 13 个月。清理任务只删除已终止且已完成聚合的数据,不删除 scheduled、queued、running 或 retry_wait 记录。
告警应覆盖队列深度和最老等待时间持续增长、永久失败、重试激增、厂商延迟、无效 Token 比例、连续鉴权失败和发布流水线耗时。指标标签不要使用用户 ID、Token、Trace ID 或消息正文。