开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 14 天,点击查看活动详情
队列模式
队列模式就是我们数据结构里队列的样子
- 生产者:生产消息
- 消费者:消费消息
- 先进先出(有序)
- 生产和消费是顺序的,并发会形成竞争关系
多个消费者接收同一个队列的消息,这些消费者之间实际上是竞争的关系,每个消费者只能收到队列中的一部分消息,也就是说任何一条消息只能被其中的一个消费者收到。
-
不能满足每个消费者都读取全量的数据
- 解决办法:每一个消费者创建一个队列,生产者发送多次(资源浪费、耦合度高)
发布 - 订阅模型(Publish-Subscribe Pattern)
与队列模式的区别:一份消息数据能不能被消费多次的问题。
- 发布者(Publisher):消息的发送方
- 订阅者(Subscriber):消息的接收方
- 主题(Topic):服务端存放消息的容器
发布者将消息发送到主题中,订阅者在接收消息之前需要先“订阅主题”,每份订阅中,订阅者都可以接收到主题的所有消息。
RocketMQ 的消息模型
-
多队列提高了并发度
-
一个topic存在多个队列,在生产者生产消息的时候可以指定把消息放到哪个队列。
-
消费组:有多个消费者,队列的一个数据只会被组内一个消费者消费,组间可以重复消费。
单队列的问题:
-
顺序的消费和发送和确认机制,导致串行传输效率低
- 解决办法:一个Topic开多个队列(队列数量可以水平扩展),通过多个队列来实现多实例并行生产和消费。生产者将其消息发送给主题中的某个队列(根据一定的路由规则,比如取模之类的),主题不保证消息的有序,只有队列中的消息才是有序的。