【后端面经-架构】RabbitMQ简介

端面,架构,rabbitmq,简介 · 浏览次数 : 16

小编点评

**TOC** 1. RabbitMQ介绍MQ a. 消息队列的概念 b. RabbitMQ2.1简介 c. RabbitMQ架构图 d. RabbitMQ特性 2. RabbitMQ2.1概述 a. AMQP协议 b. RabbitMQ组件架构 c. 核心概念 3. RabbitMQ2.1特点 a. 可靠性 b. 灵活路由 c. 消息集群 d. 队列可用性 e. 支持协议 f. 消息跟踪机制 4. 优缺点 a. 解耦 b. 异步 c. 削峰 5. RabbitMQ应用场景 a. 降低开发人员的代码量 b. 提高应用程序的性能 c. 提高容错性

正文

TOC

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 优缺点

  1. 优点
    RabbitMQ具有解耦、异步、削峰的优势;
    • 解耦:
      • 对于数据传入,一般的做法是直接把数据放在传输包中,从发送发传递给接收方,但是对于RaybbiMQ,发送方只需要把数据放在消息队列中,接收方从消息队列中获取数据即可,这样就实现了解耦;
      • 这样的好处是发送发的队列数据持久化,不会因为接收方的问题导致数据丢失,同时队列中的持久化数据可以被多次复用。
    • 异步:
      • 正如解耦部分的解释,读写操作是异步进行的,不需要等待接收方的处理,这样就提高了系统的吞吐量;
    • 削峰:
      • 当在活动日出现大规模交易的时候,如果按照传统的收发操作,会造成服务器的承载负担,相信大家都遇到过服务器崩溃的情况,这对于用户和公司来说都是很糟糕的情况;
      • 使用RabbitMQ的时候,先暂时将客户端的请求数据放在队列中,然后再慢慢处理,这样就可以避免服务器的崩溃。
  2. 缺点
    • 系统复杂度:RabbitMQ的使用会增加系统的复杂度,需要考虑到消息的可靠性、重复消费、消息丢失等问题;
    • 系统可用性:当MQ崩溃的时候,整个系统就会陷入瘫痪,不使用RabbitMQ的时候,只要几个服务节点能够正常运行,整个系统就可以正常运行;
    • 一致性问题:当多个消费者同时对一个队列进行读写,就会产生一致性问题

面试模拟

Q: 为什么选择使用RabbitMQ?
A:因为RabbitMQ具有解耦、异步、削峰的优点,维护消息队列,提高传输的可靠性和读写异步。

参考资料

  1. RabbitMQ 的应用场景以及基本原理介绍
  2. rabbitMQ到底是个啥东西?
  3. 一文带你了解RabbitMQ到底是个什么鬼!

与【后端面经-架构】RabbitMQ简介相似的内容:

【后端面经-架构】RabbitMQ简介

本文主要介绍了RabbitMQ,包括其基本结构、特点、优缺点。

【后端面经-Java】AQS详解

本文介绍了AQS的核心思想、基本架构、实现方法,并对框架中的重要源码方法进行介绍和分析

【后端面经-数据库】MySQL的存储引擎简介

对于mysql中常用的四类存储引擎MyISAM、InnoDB、MEMORY、MERGE的介绍和性能对比。

【后端面经-数据库】MySQL的事务隔离级别简介

对于数据库常用的事务隔离级别进行解释和区分,并解释三类读取错误——脏读、不可重复读、幻读的区别。

【后端面经】MySQL主键、唯一索引、联合索引的区别和作用

本文介绍了MySQL中主键、唯一索引、联合索引的特点和区别,并且介绍了“索引”对于数据库操作的影响。

【后端面经-Java】Java创建线程的方法简介

本文简要介绍了java中创建线程的四种方式,并介绍了线程概念,适合新手阅读。

【后端面经-java】java线程池满的处理策略

本文对java线程池做了具体介绍,并且讨论了java线程池满了之后的拒绝策略。

【后端面经-Spring】Spring 中 bean 的生命周期)

本文简单介绍了spring中bean的生命周期

【后端面经-Java】HashMap详解

本文详细介绍了hashmap,包括基本概念、hashmap数据结构、关键变量和重要方法,并且结合源码进行分析。

【后端面经-Java】Synchronize和ReentrantLock区别

本文介绍了Synchronize和ReentrantLock同步锁的相似和不同点,并指出两者的主要特点和适用场景。