订阅模式和queue模式,订阅模式所用的消息中间件会存储消息吗,只要有人订阅,那么就可以消费同样的消息,所以这个消息一直保存在消息中间件里面?
| 事后订阅” | 指的是 消息都发完了,你才来注册要接收消息,这时候收不到消息 |
事前”:消息还没发,订阅者已经准备好了,可以收到消息
有些系统不支持“事后订阅消费历史”
RabbitMQ 本身是基于队列的,Pub/Sub 是通过 Fanout/Topic Exchange 将消息路由到多个队列实现的。每个订阅者对应一个独立的队列。如果没有消费者连接,消息仍会存入队列(如果队列存在);但如果队列是临时的(auto-delete),消费者断开后队列被删除,消息就丢失了
Kafka 的 Topic 中的消息是 持久化存储 的。
消息保留时间由配置决定(例如默认保留7天),无论有没有消费者订阅。
每个消费者组(Consumer Group)维护自己的消费偏移(offset),可以重复消费历史消息(只要还在保留期内