SpringCloud系列(十)[MQ 篇] - RabbitMQ 初步学习及详细部署步骤

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

RabbitMQ 的官方概念是这样的: 它是一种实现了高级消息队列协议AMQP的开源消息代理软件, 也称之为面向消息的中间件. 在理解RabbitMQ 之前, 先来简单了解一下 MQ 的含义: MQ 其实就是 MessageQueue 的缩写, 也就是消息队列的意思, 字面上来看也就是存放消息的队列, 比较常见的 MQ 实现有 RabbitMQ / RocketMQ / Kafka, 这样就可以将 RabbitMQ 理解为为了实现消息队列的一个技术 / 工具或者软件.

RabbitMQ

🐰关于同步通讯和异步通讯

  在学习 RabbitMQ 之前先来了解一下同步通讯和异步通讯的概念; 设想这样一个场景, 过年期间我们通过微信来约小伙伴去超市购物, 于是我就在发小群里面发了一条信息: “超市走不走”, 然后有的小伙伴看到了消息就回复 “走啊”, 但是也有的没 “及时” 看到消息就没有回复; 于是回复消息的我们几个就去了超市买了饮料, 然后通过微信支付付了钱, 超市那边接着提醒 “已到账 xx 元”.
其实上面这个场景就包含着同步通讯和异步通讯相关的概念, 我在群里发消息, 有的可以立即回复, 而有的不能够及时回复消息, 这就是异步通讯; 如果这里不是异步通讯的话, 我还得等着一个小伙伴回复消息后再去联系另一个小伙伴, 这样效率将大打折扣; 而在超市付款, 超市那边会接着提醒已到账 xx 元, 这就是同步通讯; 如果说付款到账提醒不是同步通讯的话, 那么将影响超市的效率, 导致排队付款的人会大量增多.
当然, 涉及到专业术语, 关于同步通讯和异步通讯的概念可以做以下总结:

同步通讯(缺点):
1 耦合度高: 当加入新的需求, 要修改原来的代码;
2 性能(吞吐能力)下降: 性能比较低, 调用者需要等待服务者的响应, 而如果调用链过长那么响应时间则会大大增加;
3 资源浪费: 调用链中的每个服务都在等待着响应过程, 不能够释放请求占用的资源, 高并发场景下会极度浪费系统资源;
4 级联失败: 如果服务者出现问题, 所有的调用方都会跟着出现问题, 甚至会导致整个集群出现故障.
优点: 时效性比较强, 可以立即得到结果.

异步通讯:
 还是以例子的形式解释, 过年前我在淘宝上看上了一件羽绒服, 选择好尺码后我就下单支付成功, 这个时候淘宝方会将我购买的羽绒服订单进行修改状态, 如待发货状态, 紧接着仓库会接收到订单信息, 然后调用物流服务, 从仓库分配并准备发货;
在淘宝购物这个场景中, 我支付购买服务便是时间的发布者, 也就是 Publisher, 支付完成后只需要发布一个支付成功的事件, 并且此事件还要绑定上订单 id; 而 订单服务或者物流服务则是时间的订阅者, 也就是 Consumer, 主要进行订阅支付成功的事件, 监听到事件后完成自己的业务即可.
为了解除 Publisher 和 Consumer 之间的耦合, 两者并不是直接进行通讯, 而是有一个中间人 (Broker), 发布者发布事件到 Broker, 不必关心谁来订阅这个事件; 而订阅者从 Broker 来订阅事件, 也不必关心谁发来的信息.
Broker 就像是 Vue 中的数据总线, 所有发送或者接收的数据都发到这个总线上面, 这个总线就像协议一样, 让服务间的通讯变得标准并且可控制.
在这里插入图片描述
缺点:
1 结构复杂: 服务间没有明确的流程线, 不易管理;
2 需要依赖 Broker 的可靠性 / 安全性等.

优点:
1 耦合度降低: 每个服务都可以灵活的调用甚至替换;
2 性能(吞吐量)提升: 发布者无需等待订阅者处理完成, 响应更迅速;
3 故障隔离: 服务间没有直接调用, 不存在级联失败的问题;
4 调用间没有阻塞: 不会造成同步通讯导致的资源浪费问题;
5 流量削峰: 无论发布者发布的事件流量多大, 都由 Broker 接收并存放, 订阅者可以按照自己的方式或者速度去处理事件.

🐰🐰MQ 技术对比

在这里插入图片描述
比较性能选择:

  • 可用性: Kafka / RocketMQ / RabbitMQ
  • 可靠性: RabbitMQ / RocketMQ
  • 性能及吞吐能力: RocketMQ / Kafka
  • 消息低延迟: RabbitMQ / Kafka

🐰🐰🐰 RabbitMQ 详细部署

&esmp; 上文已经详细介绍了 Docker 的安装, 这里我们使用 docker 来安装 RabbitMQ;
步骤一: 拉取 RabbitMQ: docker pull rabbitmq:3-management; 如果这里拉取速度太慢, 检查是否修改了本地的镜像源, 如何修改可看此文SpringCloud系列九[docker 篇] - Centos 7 下 Docker 的安装及基本操作指令; 如果还是慢, 那么直接下载 rabbitmq 镜像,点击此处查找镜像, 拖到虚拟机中, 执行加载镜像指令, 如: docker load -i rabbitmq.tar;
步骤二: 安装 RabbitMQ, 执行如下指令:

docker run \
 -e RABBITMQ_DEFAULT_USER=myRabbitMQ \
 -e RABBITMQ_DEFAULT_PASS=123456 \
 --name mq \
 --hostname mq1 \
 -p 15672:15672 \
 -p 5672:5672 \
 -d \
 rabbitmq:3-management

步骤三: 验证是否部署成功, 执行指令: docker images
在这里插入图片描述

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: SpringRabbitMQ

“SpringCloud系列(十)[MQ 篇] - RabbitMQ 初步学习及详细部署步骤” 的相关文章