华为云消息通知服务SMN实战:主题订阅、发布消息与告警联动配置

举报
yd_235631729 发表于 2026/11/09 14:46:38 2026/11/09
【摘要】 本文介绍华为云消息通知服务SMN的核心用法:创建主题、配置短信邮件与HTTP订阅、发布消息、与云监控告警联动,以及订阅确认、权限和常见问题处理,帮助把告警与业务通知可靠送达。

一、背景:通知链路为什么单独拿出来做

云上资源一多,告警、审计、流水线结果、业务事件都需要“通知到人”。如果每个系统各自对接短信网关或邮件服务器,认证、频控、失败重试都会变成重复建设。华为云的消息通知服务(Simple Message Notification,简称SMN)提供统一的主题(Topic)模型:发布者把消息打到主题,订阅者按协议接收,常见协议包括短信、邮件、HTTP/HTTPS回调等。

在日常运维里,SMN最常见的用法是配合云监控服务(CES):指标或事件触发告警后,CES把告警内容发布到指定主题,再由主题扇出到值班手机、邮箱或自建接收服务。本文按“创建主题 → 添加并确认订阅 → 发布测试消息 → 与告警联动 → 权限与排障”的顺序实操一遍,并补充生产环境要注意的点。菜单名称以控制台当前版本为准。

二、核心概念

主题(Topic):消息的逻辑通道。一个主题可以有多个订阅,发布一次,所有已确认的订阅都能收到(视过滤规则而定)。

订阅(Subscription):主题下的接收端,需要指定协议和终端。例如短信协议对应手机号,邮件协议对应邮箱,HTTP协议对应可公网访问的接收URL。

订阅确认:短信、邮件、HTTP等订阅创建后通常处于“待确认”状态,终端侧需要点击确认链接或返回成功响应后,才会变成“已确认”并开始收消息。未确认的订阅不会收到业务消息。

发布消息:向主题发送一条消息,可带主题、正文、消息结构(文本或JSON)等。支持控制台手动发布,也支持API/SDK/CLI由程序发布。

消息过滤:部分场景可为订阅配置过滤策略,只接收匹配的消息,减少无关打扰。具体能力以产品当前支持情况为准。

三、创建主题

进入消息通知服务控制台:

  1. 选择区域(告警与资源所在区域尽量一致,避免跨区域排查成本);
  2. 创建主题,名称建议带业务与环境,例如 ops-alarm-prod、pipeline-notify-test;
  3. 按需添加显示名、标签,便于后续按企业项目或费用归属管理;
  4. 记录主题的URN(统一资源名称),程序调用和部分云服务联动时会用到,格式由平台分配,形如:
urn:smn:<区域>:<项目ID>:<主题名>

不要把主题URN提交到公开仓库的同时附带永久密钥。程序访问应使用最小权限委托或临时凭证。

四、添加订阅并完成确认

在主题详情中添加订阅,按接收方式分别配置。

邮件订阅:协议选邮件,终端填写值班邮箱。保存后邮箱会收到确认邮件,必须点击确认,状态变为已确认后才生效。建议使用组邮箱,避免个人离职导致告警无人接收。

短信订阅:协议选短信,终端填写手机号。同样需要按短信提示完成确认。短信有费用且有发送频率限制,适合紧急告警,不适合高频调试信息。

HTTP/HTTPS订阅:协议选HTTP或HTTPS,终端填写接收服务地址。创建后SMN会发送确认请求,接收服务需要按文档解析并回访确认URL,或返回规定格式,订阅才会生效。生产环境优先HTTPS,并在接收端做签名校验,防止伪造告警。

示意性的接收端处理逻辑(伪代码,框架任选):

若请求为订阅确认:
    从请求体读取 SubscribeURL
    服务端访问该 SubscribeURL 完成确认
    返回成功
若请求为通知消息:
    校验签名与时间戳
    解析主题、正文、消息ID
    写入自己的告警系统或群机器人
    在限定时间内返回成功状态码

注意:确认URL和回调地址都不要写进对外公开的博客正文;运维文档里如需记录,用占位符,例如 <订阅确认地址>、<接收服务路径>。

可以一次性给同一主题加“邮件 + 短信 + HTTP”三类订阅,实现渠道冗余:短信保紧急可达,邮件保细节完整,HTTP保自动化闭环。

五、发布测试消息

订阅确认后,先在控制台对主题发布一条测试消息:

  1. 打开主题 → 发布消息;
  2. 填写消息标题与正文,例如“SMN连通性测试”;
  3. 选择消息格式(文本即可);
  4. 发布后检查各终端是否收到。

用CLI或API发布时,需要已配置访问密钥与正确的区域端点。命令行工具的示意调用如下(参数名以当前CLI版本帮助为准):

# 发布文本到指定主题(主题URN、区域请替换为占位值)
hcloud SMN PublishMessage \
  --topic-urn "<主题URN>" \
  --subject "connectivity-test" \
  --message "hello from smn test" \
  --cli-region "<区域>"

若控制台发布能收到、API发布收不到,重点查凭证权限、区域是否一致、主题URN是否复制完整。若全部收不到,回头检查订阅状态是不是仍停留在待确认。

六、与云监控告警联动

把SMN接到CES告警,是最常见的生产用法。

  1. 在CES创建或编辑告警规则;
  2. 通知方式中选择SMN主题,勾选告警触发与告警恢复都通知;
  3. 告警级别与主题可以按需拆分:紧急告警进 ops-alarm-critical(含短信),普通告警进 ops-alarm-info(仅邮件或HTTP);
  4. 在测试机上制造可恢复的压力(例如CPU压测),确认能收到告警短信/邮件,并在指标恢复后收到恢复通知。

告警正文一般包含资源名、指标、当前值、时间戳。建议在告警规则名称和描述里写清业务影响与处理手册位置,方便半夜值班的人直接行动,而不是再翻文档。

除了CES,云审计、部分数据库与中间件事件、自定义应用也可以直接向同一主题发消息,形成统一通知总线。这时更要用好主题拆分和过滤,避免所有信息挤在一个通道里。

七、权限、安全与费用

权限:遵循最小权限。发布者角色只授“向某主题发布”的权限;管理员才能管理订阅。子账号不要共享主账号的永久密钥。

敏感信息:消息体会进入邮件、短信和第三方回调,不要把密码、访问密钥、证件号放进通知正文。必要时只发工单号或资源ID,细节到内网系统查看。

订阅安全:HTTP订阅必须校验签名;定期清理离职人员的手机号和邮箱;重要主题开启操作审计,结合云审计服务(CTS)追溯谁改过订阅。

费用与限流:短信按条计费,调试阶段尽量用邮件或HTTP。注意平台对发布频率、短信模板(如有)的限制,突发告警风暴时可能触发限流,需在接收端做合并降噪。

八、接收端设计建议

自建HTTP接收服务时,建议:

  1. 快速响应:先落库或入队,再异步处理,避免SMN重试放大延迟;
  2. 幂等:以消息ID去重,防止重复通知;
  3. 重试友好:临时失败返回可重试状态码,永久失败(如格式错误)记录后返回成功,以免无限重试;
  4. 降噪:同一资源短时间重复告警做合并,恢复通知与告警通知成对展示;
  5. 多渠道转发:接收后再推到即时通讯机器人时,把严重级别映射成不同提醒方式。

九、注意事项

  1. 主题按环境拆分,测试消息永远不要发到生产主题;
  2. 新员工入职、离职要有订阅变更清单;
  3. 定期做一次“真实告警演练”,别等故障时才发现订阅过期;
  4. 邮件可能进垃圾箱,首次确认后让值班人员把发件方加白;
  5. 文档和代码示例里用占位符,不写真实手机号、邮箱和回调地址。

十、常见问题

问:订阅一直待确认?
答:检查邮箱垃圾箱或短信是否被拦截;HTTP接收服务是否公网可达、是否按文档完成了确认回访;确认链接是否过期,过期可删除后重建订阅。

问:CES告警显示已触发但没收到通知?
答:核对告警规则是否选对主题、主题下是否有已确认订阅、通知时段是否屏蔽了当前时间、短信是否欠费或触发限流。

问:HTTP订阅反复收到同一条?
答:多半是接收端没有在时限内返回成功,SMN按重试策略再次投递。检查处理耗时、幂等与返回码。

问:能否只让部分订阅收某类消息?
答:可以拆分多个主题,或在支持过滤策略的前提下为订阅配置过滤条件。业务复杂时,拆主题通常更清晰。

十一、总结

SMN用主题把“谁发消息”和“谁收消息”解耦,是云上告警与业务通知的基础设施。本文走完了创建主题、确认邮件短信与HTTP订阅、发布测试消息、与CES告警联动,以及权限费用和接收端设计要点。落地时抓住三条:订阅必须确认、渠道要有冗余、正文不带密钥。把通知链路建设扎实,监控和自动化流水线才真正“叫得住人”。细节参数与计费请以官方文档和控制台为准。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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