华为云 SMN 消息通知:主题订阅、筛选策略与投递可靠性边界
通知链路的终点不是“发布成功”
SMN 把告警、审批和业务事件推到短信、邮件或 HTTP(S) 终端时,控制台或 API 返回消息 ID,通常只说明消息已被接收并开始尝试投递。业务真正需要的是:订阅者已确认、筛选条件匹配、终端可到达,以及接收端能幂等处理。本文根据官方用户指南与 FAQ 整理设计要点,不虚构生产实测数据。
一、先确认订阅,再讨论送达率
向主题添加订阅后,SMN 会向终端发送确认信息,确认链接在 48 小时内有效。未确认的订阅不会接收业务消息。短信、邮件、HTTP(S)、FunctionGraph 等协议的终端格式不同,官方也不会校验终端是否真实存在,因此错误号码或不可达 URL 会表现为“添加成功但永远收不到”。
反复请求确认会触发流控:例如邮件订阅者 1 小时最多约 20 次、2 天约 40 次;短信更严。超过阈值后会进入一段时间的限制,确认成功后流控状态会清零。运维手册应写清楚“先查订阅状态,再决定是否重发确认”,避免把流控当成系统故障。
二、HTTP(S) 终端要按官方超时设计
FAQ 明确:SMN 向 HTTP(S) 终端发送消息的超时时间为 5 秒;超过即视为失败。仅当终端返回内部错误(HTTP 状态码大于等于 500)时才会重试;其他场景通常不重试。失败超过 6 次的消息会被丢弃,且不会额外通知用户“发送失败”。
因此接收端应在 5 秒内返回 2xx,耗时处理放到异步队列;以消息 ID(如 X-SMN-MESSAGE-ID)做幂等,防止重试或重复发布造成重复动作。短时多次失败还可能进入黑名单,约 5–10 分钟后自动移除,期间表现为“别的终端正常、该 URL 暂时收不到”。
三、用筛选策略做定向推送,而不是复制主题
订阅筛选策略作用于消息属性。发布时带上属性,订阅端按 JSON 策略匹配,只有命中的订阅者才会收到。官方样例按团队、岗位等维度分流,适合告警分级和多团队共用一个主题。
需要注意:未配置筛选策略的订阅,在消息携带非协议类属性时可能收不到;没有属性且没有策略时,消息会发给所有已确认订阅。上线前应用固定属性集合做对照测试,确认“该收的收得到、不该收的收不到”。
四、发布方式要匹配终端协议
发布可用文本、JSON 结构或模板。短信有长度与符号限制;HTTP(S) 消息由 SMN 组装头与体,接收端需按官方格式解析。不同协议内容差异大时,优先用 message_structure 为各协议准备内容,并始终提供 default。
主题若绑定 KMS,还需按文档准备委托,否则加密主题的发布会在权限环节失败。这类失败属于配置问题,不是“通知服务不稳定”。
五、上线前检查清单
- 主题命名与业务域一致,订阅状态均为已确认。
- HTTP(S) 终端公网可达,5 秒内返回 2xx,并实现消息 ID 幂等。
- 筛选策略与发布属性字段名、取值一致,做过正反用例。
- 明确哪些失败会重试、哪些会丢弃,关键业务有补偿或对账。
- 确认流控与计费规则已写入运维手册,避免反复请求确认。
官方参考
- 点赞
- 收藏
- 关注作者
评论(0)