一、 什么是RabbitMQ
一种开源的消息代理中间件,作用:创建MQ(消息队列),异步发送接受消息
二、 使用场景与好处
1.异步处理,提高用户体验
2.削峰错谷,缓解系统压力
3.解耦合
三、与其他MQ的对比
kafka:现归属Apache,基于pull模式,大吞吐量性能好,但不关注消息的丢失,重复,错误
RocketMQ:归属阿里,Java开发,适合大规模分布式系统应用,修复了kafka的不足,优化了消息的可靠传输与事务性
RabbitMQ:Erlang语言开发,性能略低于kafka,支持语言众多,实现AMQP(Advanced Message Queuing Protocol),适用于对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求相对低
支持语言对比
- Kafka 支持语言:Java、Scala
- RocketMQ 支持语言:Java、C++、Golang
- RabbitMQ 支持语言:C#、Java、Js/NodeJs、Python、Ruby、Erlang、Perl、Clojure、Golang
四、作用与机制
处于代理角色,负责处理运送由生产者者创建和推送的消息,给消费者做后续的处理确认
无论是生产者还是消费者,首先要与RabbitMQ服务连接,即打开TCP连接,一旦通过认证,就与Rabbit server创建了一条AMQP Channel(信道),channel是基于真实TCP连接的虚拟连接,由ID标识。
五、常用术语
ConnectionFactory(连接管理器): 应用程序与Rabbit之间建立连接的管理器,程序代码中使用;
Channel(信道): 消息推送使用的通道;
Exchange(交换器): 用于接受、分配消息;
Queue(队列): 用于存储生产者的消息;
RoutingKey(路由键): 用于把生成者的数据分配到交换器上;
BindingKey(绑定键): 用于把交换器的消息绑定到队列上;
RabbitMQ中消息传递模型的核心思想是生产者永远不会将任何消息直接发送到队列。生产者通常甚至不知道消息是否会被传递到任何队列。
生产者只能向交换器(Exchange)发送消息。一方面,Exchange接收来自生产者的消息,另一方面将它们推送到队列。Exchange必须确切知道如何处理收到的消息。其规则由交换器类型定义,这部分在下一篇文章详细介绍 。