RabbitMQ介绍
一、核心概念
RabbitMQ的核心概念如下:
- 生产者:发送消息的应用。
- 消费者:接收消息的应用。
- Exchange:将消息路由到Queue的组件。
- Queue:存储消息的缓冲区。
二、RabbitMQ消息流
消息在RabbitMQ的组件之间流动的过程如下:
1、生产者向Exchange发送消息。
2、Exchange根据消息属性将消息路由到Queue进行存储。
3、消费者从Queue拉取消息进行消费。
生产者 --> exchange --> queue--> 消费者
三、应用场景
异步解耦
RabbitMQ可用于单体应用被拆解为微服务后不同微服务间的通信。应用解耦的好处是不同应用的迭代不再相互依赖,而异步通信的好处是数据不再需要被立即处理。异步解耦能有效缩短数据链路长度,提高数据处理效率。
削峰填谷
大型活动带来较高流量脉冲时,没有做好相应保护容易导致系统超负荷甚至崩溃,限制太过则会导致请求大量失败而影响用户体验。RabbitMQ能做到削峰填谷。其高性能的消息处理能力可以承接流量脉冲而不被击垮,在确保系统可用性的同时,通过快速有效的请求响应技术提升用户体验。其海量消息堆积能力确保下游业务在安全水位内平滑稳定的运行,避免流量高峰的冲击。
分布式缓存同步
大量并发访问数据库会导致页面响应时间长。通过RabbitMQ构建分布式缓存,支持实时通知数据变化,有效降低页面响应时间,满足对变更的大量访问需求。
四、Connection和Channel
Connection
Connection是物理TCP连接。Connection将应用与RabbitMQ连接在一起。Connection会执行认证、IP解析、路由等底层网络任务。应用与RabbitMQ完成Connection建立大约需要15个TCP报文交互,因而会消耗大量的网络资源和消息队列RabbitMQ版资源。大量的Connection会对消息队列RabbitMQ版造成巨大压力,甚至触发RabbitMQ的SYN洪水攻击防护,导致RabbitMQ无响应,进而影响您的业务。
Channel
Channel是物理TCP连接中的虚拟连接。当应用通过Connection与RabbitMQ建立连接后,所有的AMQP协议操作(例如创建队列、发送消息、接收消息等)都会通过Connection中的Channel完成。Channel可以复用Connection,即一个Connection下可以建立多个Channel。Channel不能脱离Connection独立存在,而必须存活在Connection中。当某个Connection断开时,该Connection下的所有Channel都会断开。当大量应用需要与RabbitMQ建立多个连接时,建议您使用Channel来复用Connection,从而减少网络资源和RabbitMQ资源消耗。
使用建议(注释)