You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Service Bus如何通配订阅announce/*路径并单接收器接收所有消息

核心结论

Azure Service Bus 的主题是独立平级的资源实体,和 MQTT 协议的层级主题树模型有本质区别:主题名称中的/只是普通字符,不代表路径层级,产品原生不支持跨多个主题的通配符订阅,你在门户中只能为单个主题创建订阅是正常的设计限制。

要实现announce/*范围消息统一接收、仅用单次receiver.ReceiveMessageAsync(cancellationToken: stoppingToken)调用即可消费所有消息的需求,有两种生产可用方案:

方案一:单主题+消息属性路由(长期最优解)

这个方案和你熟悉的MQTT主题使用逻辑最接近,后续扩展成本最低:

  • 删掉当前两个拆分的独立主题,仅创建一个根主题announce
  • 调整所有代理的发送逻辑:所有消息统一发往announce主题,不再按后缀发送到不同主题;同时给消息添加自定义应用属性(比如route_suffix),原发往announce/awoga-corp的消息将该属性值设为awoga-corp,原发往announce/company-first的消息将该属性值设为company-first
  • 业务服务器直接为announce主题创建一个接收订阅,默认配置下该订阅会接收主题下的全量消息,你只需要用单个ServiceBusReceiver实例对接这个订阅,调用ReceiveMessageAsync即可拿到所有announce路径下的消息。后续如果有其他业务需要消费特定后缀的消息,只需要给同一个announce主题创建新订阅,配置对应的SQL过滤规则(例如route_suffix = 'awoga-corp')即可,不需要改动发送端。

方案二:服务端自动转发聚合(兼容现有部署,零发送端改动)

如果你已经上线了现有两个主题的发送逻辑,不方便改动发送端代码,可以用Service Bus原生的自动转发能力实现消息聚合,不需要自行开发转发服务:

  • 新建一个专门用于聚合消息的主题,例如命名为announce-aggregate
  • 分别给现有两个主题announce/awoga-corp、announce/company-first创建一个专用转发订阅,将两个订阅的「转发消息到」配置都指向新建的announce-aggregate主题,关闭订阅的自动空闲删除、不必要的死信规则即可
  • 业务服务器仅需为announce-aggregate主题创建接收订阅,用单个接收器对接即可。所有发往原有两个主题的消息都会在Service Bus服务端自动转发到聚合主题,你单次调用ReceiveMessageAsync就能消费所有announce/*范围的消息。整个转发过程是服务端原生实现,消息可靠性和原生消费一致,没有额外性能开销。

不建议自行实现多接收器轮询两个主题、内存合并消息的方案:这类方案需要自行处理多连接保活、并发消费、消息去重、异常重试等逻辑,可靠性和运维成本都远高于原生方案。

你提到的门户仅支持单主题创建订阅的操作界面:
Azure门户创建订阅界面

内容的提问来源于stack exchange,提问作者morleyc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 13:18:22