1. MQ 介绍
MQ(Message Queue)用于在应用程序之间互相通信,在音讯中发送数据进行通信,而不须要特意建设连贯传输数据。
与之对应的另一种通信形式是近程间接调用(RPC),须要先建设通信连贯而后传递数据。
2. RabbitMQ
2.1 简介
RabbitMQ 是一个开源的音讯队列零碎,应用 Erlang 语言编写的,基于 AMQP 协定的。
AMQP 全程是 Advanced Message Queuing Protocol,即高级音讯队列协定,是应用层协定的一个凋谢规范,为面向音讯的中间件设计。具备面向信息、队列、路由(包含点对点和公布 / 订阅)、可靠性、平安等特色。
2.2 架构:组件解释
RabbitMQ 的架构图如下所示:
上面介绍一下其中的次要概念:
Producer
:音讯生产者,就是投递音讯的程序。Connection
:AMQP 客户端到 broker 的 TCP 连贯。Channal
:在 connection 外部建设的逻辑练级,这样一个 connection 可能承载多个拜访;Broker
:音讯队列服务器实体。Virtual Host
:虚拟主机,在多个用户应用同一个 RabbitMQ 服务器的时候,用于进行逻辑隔离,-
Exchange
:音讯交换机,它指定音讯中的 routing key 按什么规定,路由到哪个队列。次要的调配类型包含:- Direct:点对点(齐全匹配)
- Fanout:播送
- Topic:主题(规定匹配)
Queue
:数据队列,音讯的载体,每个音讯都会被投入到一个或多个队列。-
binding
:是 exchange 和 queue 之间的虚构连贯,蕴含 routing key。2.3 特点
RaybbiMQ 具备如下特点:
- 可靠性:长久化、生产确认等传输机制保障传输的可靠性;
- 灵便路由:应用 exchange 机制灵便路由,上面会具体介绍;
- 音讯集群:多服务器组成集群;
- 队列可用性:队列在集群的机器上能够镜像,局部节点出问题不影响整体可用性;
- 反对多种协定:对于 STOMP、MQTT 等音讯队列协定的反对;
- 跟踪机制:对于异样音讯提供音讯跟踪,不便确认异样起因;
- 用户敌对:多语言客户端,治理界面易用,提供多种插件,也容许用户本人实现插件;
2.4 优缺点
-
长处
RabbitMQ 具备解耦、异步、削峰的劣势;-
解耦:
- 对于数据传入,个别的做法是间接把数据放在传输包中,从发送发传递给接管方,然而对于 RaybbiMQ,发送方只须要把数据放在音讯队列中,接管方从音讯队列中获取数据即可,这样就实现理解耦;
- 这样的益处是发送发的队列数据长久化,不会因为接管方的问题导致数据失落,同时队列中的长久化数据能够被屡次复用。
-
异步:
- 正如解耦局部的解释,读写操作是异步进行的,不须要期待接管方的解决,这样就进步了零碎的吞吐量;
-
削峰:
- 当在流动日呈现大规模交易的时候,如果依照传统的收发操作,会造成服务器的承载累赘,置信大家都遇到过服务器解体的状况,这对于用户和公司来说都是很蹩脚的状况;
- 应用 RabbitMQ 的时候,先临时将客户端的申请数据放在队列中,而后再缓缓解决,这样就能够防止服务器的解体。
-
-
毛病
-
零碎复杂度:RabbitMQ 的应用会减少零碎的复杂度,须要思考到音讯的可靠性、反复生产、音讯失落等问题;
- 零碎可用性:当 MQ 解体的时候,整个零碎就会陷入瘫痪,不应用 RabbitMQ 的时候,只有几个服务节点可能失常运行,整个零碎就能够失常运行;
- 一致性问题:当多个消费者同时对一个队列进行读写,就会产生一致性问题
-
面试模仿
Q: 为什么抉择应用 RabbitMQ?
A:因为 RabbitMQ 具备解耦、异步、削峰的长处,保护音讯队列,进步传输的可靠性和读写异步。
参考资料
- RabbitMQ 的利用场景以及基本原理介绍
- rabbitMQ 到底是个啥货色?
- 一文带你理解 RabbitMQ 到底是个什么鬼!