Skip to main content

为什么用 RabbitMQ

David LiuAbout 3 min

为什么用 RabbitMQ

使用场景

消息队列是一种异步通信机制,常用于以下场景:

  1. 异步处理:将请求放入消息队列中,异步处理请求,提高系统的吞吐量和响应速度。

  2. 解耦系统:将不同系统之间的通信通过消息队列进行解耦,提高系统的可维护性和可扩展性。

  3. 流量削峰:将请求放入消息队列中,通过控制消息队列的长度和消费速度,实现流量削峰,保护系统的稳定性。

流量削峰原理

消息队列流量削峰的原理是通过控制消息队列的长度和消费速度,实现流量的平滑处理。具体来说,可以通过以下方式进行流量削峰:

  1. 增加消息队列的长度:增加消息队列的长度,可以缓存更多的请求,从而减少请求的丢失。

  2. 控制消息队列的消费速度:通过控制消息队列的消费速度,可以平滑处理请求,避免瞬时流量过大导致系统崩溃。

  3. 增加消费者的数量:增加消费者的数量,可以提高消息队列的消费速度,从而更快地处理请求。

  4. 限流:通过限制每个请求的处理时间和并发数,可以避免请求的积压和堆积,从而保证系统的稳定性。

总的来说,消息队列流量削峰的原理是通过控制消息队列的长度和消费速度,实现流量的平滑处理。可以通过增加消息队列的长度、控制消费速度、增加消费者的数量、限流等方式进行流量削峰。

RabbitMQ

RabbitMQ 高性能的原因

使用语言:erlang

1)Erlang是面向并发的语言,支持协程,且进程间上下文切换效率远高于C语言和Java,进一步提高了RabbitMQ并发性能
2)Erlang的网络性能有着和原生Socket一样的延迟,RabbitMQ的网络IO性能极高
3)使用AMQP协议

erlang特点

1)通用的面向并发编程语言,适用于分布式系统
2)基于虚拟机解释运行,支持跨平台部署
3)进程间上下切换效率远高于C语言
4)有着和原生Socket一样的延时

使用背书

1)RabbitMQ底层使用Erlang实现,天生具有高性能的基因
2)RabbitMQ在互联网和金融领域广泛的应用

2、AMQP协议

1)AMQP协议作为RabbitMQ的规范,规定了RabbitMQ对外接口
2)学会了AMQP协议的使用,就基本上掌握了RabbitMQ的使用

3、AMQP协议架构

1)AMQP协议直接定义了RabbitMQ的内部结构和外部行为
2)我们使用RabbitMQ本质上是在使用AMQP协议
3)AMQP协议被多种消息中间件使用

消息流转流程

1)发送者不能直接将消息发送给最终队列,必须发送给交换机
2)消息根据路由规则,消息由交换机转发给队列
3)消费者是从队列将消息取走的

合理的交换机和队列设置

1)交换机数量不能过多,一般来说同一个业务,或者同一类业务使用同一个交换机
2)合理设置队列数量,一般来说一个微服务监听一个队列,或者一个微服务的一个业务监听一个队列

使用自动化配置

1)将创建交换机/队列的操作固化在应用代码里,免去复杂的运维操作,高效且不易出错
2)一般来说,交换机由双方同时声明,队列由接收方声明并配置绑定关系
2)交换机/队列的参数一定要由双方开发团队确认,否则重复声明,若参数不一致,会导致声明失败