Azure Queue与带单个全捕获订阅的Topic有何差异?
Azure Queue 与带单个全捕获订阅的 Topic 的差异对比
TL;DR(摘要):本次讨论不涉及后续添加更多订阅、订阅过滤功能的差异,仅聚焦于初始状态下二者的核心区别。
相同点
- 都配有死信队列,用来存储无法正常处理的消息
- 每条消息只会被处理一次
差异点
- 核心传递模型不同:Queue 是点对点模式,生产者直接把消息发给唯一的消费者;带单个全捕获订阅的 Topic 属于发布-订阅模式的简化版,消息先发到 Topic,再转发到对应的订阅队列,是间接传递的路子。
- 资源层级结构有区别:Topic 是命名空间下的一级资源,订阅是它的子资源;Queue 是独立的一级资源,没有下属的子资源层级。
- 消息流转路径不一样:Queue 的消息路径是「生产者 → Queue → 消费者」;Topic 的路径是「生产者 → Topic → 订阅队列 → 消费者」,多了一层 Topic 到订阅的转发环节。
- 底层设计的扩展性逻辑不同:虽然这次不谈后续加订阅,但从初始设计来看,Topic 天生就是为多订阅场景搭建的架构,哪怕初始只有一个订阅,底子也是发布-订阅的;Queue 是纯点对点架构,没法直接扩展成多消费者模式。
- 计费方式有差异:Topic 的计费要算两部分——Topic 接收的消息量,加上订阅转发出去的消息量;Queue 只按自身接收和发送的消息量计费。
- 消息保留与过期的作用范围不同:Topic 的消息保留规则作用于 Topic 本身,消息过期后就会被清理,要是订阅没及时捕获(哪怕是全捕获订阅也可能有时间差),消息就会被丢弃;Queue 的消息保留规则直接作用于队列里的所有消息,直到被消费或者过期。
内容的提问来源于stack exchange,提问作者LosManos
相关产品推荐
相关产品推荐

