为什么用 RabbitMQ
March 29, 2023About 3 min
为什么用 RabbitMQ
使用场景
消息队列是一种异步通信机制,常用于以下场景:
异步处理:将请求放入消息队列中,异步处理请求,提高系统的吞吐量和响应速度。
解耦系统:将不同系统之间的通信通过消息队列进行解耦,提高系统的可维护性和可扩展性。
流量削峰:将请求放入消息队列中,通过控制消息队列的长度和消费速度,实现流量削峰,保护系统的稳定性。
流量削峰原理
消息队列流量削峰的原理是通过控制消息队列的长度和消费速度,实现流量的平滑处理。具体来说,可以通过以下方式进行流量削峰:
增加消息队列的长度:增加消息队列的长度,可以缓存更多的请求,从而减少请求的丢失。
控制消息队列的消费速度:通过控制消息队列的消费速度,可以平滑处理请求,避免瞬时流量过大导致系统崩溃。
增加消费者的数量:增加消费者的数量,可以提高消息队列的消费速度,从而更快地处理请求。
限流:通过限制每个请求的处理时间和并发数,可以避免请求的积压和堆积,从而保证系统的稳定性。
总的来说,消息队列流量削峰的原理是通过控制消息队列的长度和消费速度,实现流量的平滑处理。可以通过增加消息队列的长度、控制消费速度、增加消费者的数量、限流等方式进行流量削峰。
RabbitMQ
RabbitMQ 高性能的原因
使用语言:erlang
- Erlang是面向并发的语言,支持协程,且进程间上下文切换效率远高于C语言和Java,进一步提高了RabbitMQ并发性能
- Erlang的网络性能有着和原生Socket一样的延迟,RabbitMQ的网络IO性能极高
- 使用AMQP协议
erlang特点
- 通用的面向并发编程语言,适用于分布式系统
- 基于虚拟机解释运行,支持跨平台部署
- 进程间上下切换效率远高于C语言
- 有着和原生Socket一样的延时
使用背书
- RabbitMQ底层使用Erlang实现,天生具有高性能的基因
- RabbitMQ在互联网和金融领域广泛的应用
2、AMQP协议
- AMQP协议作为RabbitMQ的规范,规定了RabbitMQ对外接口
- 学会了AMQP协议的使用,就基本上掌握了RabbitMQ的使用
3、AMQP协议架构
- AMQP协议直接定义了RabbitMQ的内部结构和外部行为
- 我们使用RabbitMQ本质上是在使用AMQP协议
- AMQP协议被多种消息中间件使用
消息流转流程
- 发送者不能直接将消息发送给最终队列,必须发送给交换机
- 消息根据路由规则,消息由交换机转发给队列
- 消费者是从队列将消息取走的
合理的交换机和队列设置
- 交换机数量不能过多,一般来说同一个业务,或者同一类业务使用同一个交换机
- 合理设置队列数量,一般来说一个微服务监听一个队列,或者一个微服务的一个业务监听一个队列
使用自动化配置
- 将创建交换机/队列的操作固化在应用代码里,免去复杂的运维操作,高效且不易出错
- 一般来说,交换机由双方同时声明,队列由接收方声明并配置绑定关系
- 交换机/队列的参数一定要由双方开发团队确认,否则重复声明,若参数不一致,会导致声明失败