文章插图
整体阅读时间,在 40 分钟左右 。常见的消息队列很多,主要包括 RabbitMQ、Kafka、RocketMQ 和 ActiveMQ,相关的选型可以看我之前的系列,这篇文章只讲 RabbitMQ,先讲原理,后搞实战 。
文章很长,如果你能一次性看完,“大哥,请收下我的膝盖”,建议大家先收藏,啥时需要面试,或者工作中遇到了,可以再慢慢看 。
不 BB,直接上思维导图:
文章插图
1. 消息队列1.1 消息队列模式消息队列目前主要 2 种模式,分别为“点对点模式”和“发布/订阅模式” 。
1.1.1 点对点模式一个具体的消息只能由一个消费者消费,多个生产者可以向同一个消息队列发送消息,但是一个消息在被一个消息者处理的时候,这个消息在队列上会被锁住或者被移除并且其他消费者无法处理该消息 。
需要额外注意的是,如果消费者处理一个消息失败了,消息系统一般会把这个消息放回队列,这样其他消费者可以继续处理 。
文章插图
1.1.2 发布/订阅模式单个消息可以被多个订阅者并发的获取和处理 。一般来说,订阅有两种类型:
- 临时(ephemeral)订阅:这种订阅只有在消费者启动并且运行的时候才存在 。一旦消费者退出,相应的订阅以及尚未处理的消息就会丢失 。
- 持久(durable)订阅:这种订阅会一直存在,除非主动去删除 。消费者退出后,消息系统会继续维护该订阅,并且后续消息可以被继续处理 。
文章插图
1.2 衡量标准对消息队列进行技术选型时,需要通过以下指标衡量你所选择的消息队列,是否可以满足你的需求:
- 消息顺序:发送到队列的消息,消费时是否可以保证消费的顺序,比如A先下单,B后下单,应该是A先去扣库存,B再去扣,顺序不能反 。
- 消息路由:根据路由规则,只订阅匹配路由规则的消息,比如有A/B两者规则的消息,消费者可以只订阅A消息,B消息不会消费 。
- 消息可靠性:是否会存在丢消息的情况,比如有A/B两个消息,最后只有B消息能消费,A消息丢失 。
- 消息时序:主要包括“消息存活时间”和“延迟/预定的消息”,“消息存活时间”表示生产者可以对消息设置TTL,如果超过该TTL,消息会自动消失;“延迟/预定的消息”指的是可以延迟或者预订消费消息,比如延时5分钟,那么消息会5分钟后才能让消费者消费,时间未到的话,是不能消费的 。
- 消息留存:消息消费成功后,是否还会继续保留在消息队列 。
- 容错性:当一条消息消费失败后,是否有一些机制,保证这条消息是一种能成功,比如异步第三方退款消息,需要保证这条消息消费掉,才能确定给用户退款成功,所以必须保证这条消息消费成功的准确性 。
- 伸缩:当消息队列性能有问题,比如消费太慢,是否可以快速支持库容;当消费队列过多,浪费系统资源,是否可以支持缩容 。
- 吞吐量:支持的最高并发数 。
2.1 基本概念提到RabbitMQ,就不得不提AMQP协议 。AMQP协议是具有现代特征的二进制协议 。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计 。
先了解一下AMQP协议中间的几个重要概念:
- Server:接收客户端的连接,实现AMQP实体服务 。
- Connection:连接,应用程序与Server的网络连接,TCP连接 。
- Channel:信道,消息读写等操作在信道中进行 。客户端可以建立多个信道,每个信道代表一个会话任务 。
- Message:消息,应用程序和服务器之间传送的数据,消息可以非常简单,也可以很复杂 。由Properties和Body组成 。Properties为外包装,可以对消息进行修饰,比如消息的优先级、延迟等高级特性;Body就是消息体内容 。
- Virtual Host:虚拟主机,用于逻辑隔离 。一个虚拟主机里面可以有若干个Exchange和Queue,同一个虚拟主机里面不能有相同名称的Exchange或Queue 。
- Exchange:交换器,接收消息,按照路由规则将消息路由到一个或者多个队列 。如果路由不到,或者返回给生产者,或者直接丢弃 。RabbitMQ常用的交换器常用类型有direct、topic、fanout、headers四种,后面详细介绍 。
推荐阅读
- 生科医学|突发!日本首相岸田文雄感染新冠:全国医疗已经崩溃
- Firefox浏览器|火狐浏览器新增实用工具:将支持图片文字识别
- 超跑|3.5秒破百的V12怪兽!阿斯顿马丁新超跑限量249辆已卖空
- 青椒猪肝的做法
- 冻肉新做法
- 动画|《白蛇》系列团队全新力作!《新神榜:杨戬》上映两天票房破亿
- 登月|中国长征系列火箭创下新纪录:2030年左右载人登月!
- 薰衣草枕头最新功效和作用介绍 熏衣草枕头
- 蚊子|南方蚊子变少了?或热死或北上避暑:天气转凉后会重新活跃
- 充电|四川供电紧张 半夜连跑三个充电桩才充上电 新能源车主:体会到狼狈