华为云 SMN 消息通知:主题订阅、筛选策略与投递可靠性边界

举报
欣然过了 发表于 2026/11/09 11:19:07 2026/11/09
【摘要】 依据华为云消息通知服务 SMN 官方文档,梳理主题与订阅确认、HTTP(S) 投递超时与重试、订阅筛选策略,以及不能把“已发布”当成“业务已处理”的设计边界。本文为文档分析,不代表已在生产环境验证。

通知链路的终点不是“发布成功”

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,还需按文档准备委托,否则加密主题的发布会在权限环节失败。这类失败属于配置问题,不是“通知服务不稳定”。

五、上线前检查清单

  1. 主题命名与业务域一致,订阅状态均为已确认。
  2. HTTP(S) 终端公网可达,5 秒内返回 2xx,并实现消息 ID 幂等。
  3. 筛选策略与发布属性字段名、取值一致,做过正反用例。
  4. 明确哪些失败会重试、哪些会丢弃,关键业务有补偿或对账。
  5. 确认流控与计费规则已写入运维手册,避免反复请求确认。

官方参考

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。