首页 新闻 会员 周边

有些系统只支持“事后订阅”无法消费历史消息 事后订阅什么意思

0
[已关闭问题] 关闭于 2026-02-06 11:24

订阅模式和queue模式,订阅模式所用的消息中间件会存储消息吗,只要有人订阅,那么就可以消费同样的消息,所以这个消息一直保存在消息中间件里面?

*Tesla*的主页 *Tesla* | 老鸟四级 | 园豆:2186
提问于:2026-02-06 11:01
< >
分享
所有回答(1)
0
事后订阅” 指的是 消息都发完了,你才来注册要接收消息,这时候收不到消息

事前”:消息还没发,订阅者已经准备好了,可以收到消息

有些系统不支持“事后订阅消费历史”

因为它们的设计目标不同:
  • Redis Pub/Sub、传统 RabbitMQ Pub/Sub:
    定位是 实时通知系统,强调低延迟、轻量,不保证可靠性或历史回溯。
  • Kafka、Pulsar:
    定位是 分布式日志/事件流平台,核心特性就是 持久化 + 回溯 + 重放
想象一个微信群:
  • 支持事后订阅(如 Kafka):
    你今天加群,还能往上翻聊天记录,看到昨天大家发的消息。
  • 不支持事后订阅(如 Redis Pub/Sub):
    你进群之前的所有消息都看不见,只能看到你进群之后的新消息。

RabbitMQ 本身是基于队列的,Pub/Sub 是通过 Fanout/Topic Exchange 将消息路由到多个队列实现的。每个订阅者对应一个独立的队列。如果没有消费者连接,消息仍会存入队列(如果队列存在);但如果队列是临时的(auto-delete),消费者断开后队列被删除,消息就丢失了

  • 消息是否持久化?取决于:
    • 是否声明为 持久化队列(durable)
    • 消息是否标记为 持久化(persistent)

 

Kafka 的 Topic 中的消息是 持久化存储 的。

消息保留时间由配置决定(例如默认保留7天),无论有没有消费者订阅。

每个消费者组(Consumer Group)维护自己的消费偏移(offset),可以重复消费历史消息(只要还在保留期内

*Tesla* | 园豆:2186 (老鸟四级) | 2026-02-06 11:24
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册