Bootstrap

RabbitMQ介绍及安装(基于docker)

RabbitMQ介绍及安装

1. MQ介绍

MQ全称为Message Queue,即消息队列。从字面意思上看,它本质是个队列,FIFO(先入先出),只不过队列中存放的内容是message而已。它也是一种应用程序对应用程序的消息通信方式,允许分布式系统中的不同组件通过消息传递进行通信。具体来说,一端往队列不断发布信息,另一端从队列中读取消息,发布者不需要关心是谁读取了消息,读取消息者也不需要关心是谁发布了消息,双方各干各的,互不干扰。

在互联网架构中,MQ是一种非常常见的上下游“逻辑解耦+物理解耦”的消息通信服务。使用了MQ之后,消息发送上游只需要依赖MQ,不用依赖其他服务。消息发送者和接收者不需要同时处于活跃状态,消息可以持久化存储在磁盘中,确保在系统崩溃或网络故障时消息不会丢失。同时,MQ也可以保证消息在某些场景下按顺序处理,确保系统处理流程的正确性。

1.1 同步调用

微服务A在一个业务中,依次调用微服务B C D,全部完成后才是一次完整的业务链。

同步调用的方式存在下列问题:

  • 拓展性差
  • 性能下降
  • 级联失败

在这里插入图片描述

1.2 异步调用

异步调用方式其实就是基于消息通知的方式,一般包含三个角色:

  • 消息发送者:投递消息的人,就是原来的调用方
  • 消息Broker:管理、暂存、转发消息,你可以把它理解成微信服务器
  • 消息接收者:接收和处理消息的人,就是原来的服务提供方

在这里插入图片描述

在异步调用中,发送者不再直接同步调用接收者的业务接口,而是发送一条消息投递给消息Broker。然后接收者根据自己的需求从消息Broker那里订阅消息。每当发送方发送消息后,接受者都能获取消息并处理。

这样,发送消息的人和接收消息的人就完全解耦了。

异步调用的优势包括:

  • 耦合度更低
  • 性能更好
  • 业务拓展性强
  • 故障隔离,避免级联失败

异步通信缺点:

  • 完全依赖于Broker的可靠性、安全性和性能
  • 架构复杂,后期维护和调试麻烦

1.3 技术选型

消息Broker,目前常见的实现方案就是消息队列(MessageQueue),简称为MQ.

目比较常见的MQ实现:

  • ActiveMQ
  • RabbitMQ
  • RocketMQ
  • Kafka

几种常见MQ的对比:

RabbitMQActiveMQRocketMQKafka
公司/社区RabbitApache阿里Apache
开发语言ErlangJavaJavaScala&Java
协议支持AMQP,XMPP,SMTP,STOMPOpenWire,STOMP,REST,XMPP,AMQP自定义协议自定义协议
可用性一般
单机吞吐量一般非常高
消息延迟微秒级毫秒级毫秒级毫秒以内
消息可靠性一般一般

追求可用性:Kafka、 RocketMQ 、RabbitMQ

追求可靠性:RabbitMQ、RocketMQ

追求吞吐能力:RocketMQ、Kafka

追求消息低延迟:RabbitMQ、Kafka

2. RabbitMQ

RabbitMQ是基于Erlang语言开发的开源消息通信中间件,官网地址:

https://www.rabbitmq.com/

2.1 RabbitMQ架构

在这里插入图片描述

其中包含几个概念:

  • publisher:生产者,也就是发送消息的一方
  • consumer:消费者,也就是消费消息的一方
  • queue:队列,存储消息。生产者投递的消息会暂存在消息队列中,等待消费者处理
  • exchange:交换机,负责消息路由。生产者发送的消息由交换机决定投递到哪个队列。
  • virtual host:虚拟主机,起到数据隔离的作用。每个虚拟主机相互独立,有各自的exchange、queue

2.2 安装

基于docker安装:

docker run \
 -e RABBITMQ_DEFAULT_USER=admin \
 -e RABBITMQ_DEFAULT_PASS=admin \
 -v mq-plugins:/plugins \
 --name mq \
 --hostname mq \
 -p 15672:15672 \
 -p 5672:5672 \
 --network ff-net\
 -d \
 rabbitmq:3.8-management
  • 15672:RabbitMQ提供的管理控制台的端口
  • 5672:RabbitMQ的消息发送处理接口

2.3 访问登录

安装完成,访问虚拟机地址加端口15672,即可访问RabbitMQ控制台,账号密码已在docker安装部署命令中设定。

Q提供的管理控制台的端口

  • 5672:RabbitMQ的消息发送处理接口

2.3 访问登录

安装完成,访问虚拟机地址加端口15672,即可访问RabbitMQ控制台,账号密码已在docker安装部署命令中设定。

在这里插入图片描述

;