当前位置: 首页 > article >正文

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

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

RabbitMQ

  • 🐰关于同步通讯和异步通讯
  • 🐰🐰MQ 技术对比
  • 🐰🐰🐰 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
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dgrt.cn/a/391927.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章:

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

RabbitMQ 的官方概念是这样的: 它是一种实现了高级消息队列协议(AMQP)的开源消息代理软件, 也称之为面向消息的中间件. 在理解RabbitMQ 之前, 先来简单了解一下 MQ 的含义: MQ 其实就是 MessageQueue 的缩写, 也就是消息队列的意思, 字面上来看也就是存放…...

Gitflow工作流:一个健壮的用于管理大型项目的框架

title: Gitflow工作流:一个健壮的用于管理大型项目的框架 date: 2017-12-23 0:12:32 tags: GitflowGitGit Flow Workflow categories:源码管理 Gitflow工作流介绍 Gitflow工作流仍然用中央仓库作为所有开发者的交互中心,这和其它git的工作流一样&#x…...

c语言中的常见图形打印

前言 🎈个人主页:🎈 :✨✨✨初阶牛✨✨✨ 🐻推荐专栏: 🍔🍟🌯 c语言初阶 🔑个人信条: 🌵知行合一 🍉本篇简介:>:介绍c语言中的三角形与菱形打印分步介绍 效果展示图: …...

Python---私有化

专栏:python 个人主页:HaiFan. 专栏简介:Python基础已经更新完,接下来是Python面向对象的知识点。 私有化前言私有化属性set和get装饰器property前言 在做程序的过程中,有时候程序猿不想让外人动一些值,这…...

WebRTC音频系统 之audio技术栈简介-1

文章目录第一章 WebRTC技术栈简介1.1 视频会议中常见的服务端架构1.2 WebRTC 网络协议栈1.3 WebRTC 源码目录结构1.4 client侧技术栈1.5 WebRTC native编译以及debug1.6 APM模块1.7 ADM模块WebRTC是Google开源的Web实时音视频通信框架,其提供P2P的音频、视频和一般数…...

基于nodejs+vue社区互助平台- vscode项目

前端技术:nodejsvueelementui,视图层其实质就是vue页面,通过编写vue页面从而展示在浏览器中,编写完成的vue页面要能够和控制器类进行交互,从而使得用户在点击网页进行操作时能够正常。 Express 框架于Node运行环境的Web框架, 语言…...

【自动驾驶100问】第一问到第三问

配套视频: 自动驾驶100问第三问 1、四元数在表示空间旋转时的优势是什么? (1)四元数解决了其他3维空间旋转算法会遇到的恼人的问题,比如使用欧拉角来表示旋转操作时会遇到的万向节锁问题(Gimbal lock); …...

day03_注释丶关键字丶标识符丶常量

​注释 注释的概念:在编写程序的过程中,对程序代码进行解释说明。 代码本身和人类的自然语言相比,可读性肯定是要差一些,所以为了更快能够知道代码的含义、作用、需要注意地方,所有程序员都应该养成写注释的好习惯。 …...

【千峰】React全球新闻发布管理系统

千锋2022版React全家桶教程_react零基础入门到项目实战完整版_哔哩哔哩_bilibili 七模块 1. 登录模块 – 登录验证拦截 粒子特效。 2. 权限管理模块 权限列表,以及权限的增删改查 角色列表,以及角色的增删改查 3. 用户管理模块 用户列表&…...

20230205英语学习

Should You Follow the Data? Don’t Believe the Hype 在数字时代,我们应该遵循数据吗? “Follow the data,” that now-ubiquitous aphorism, might seem like a novelty of our digital age.But it’s a throwback, really, to a long-standing phi…...

rk3288如何安装qt

在RK3288上安装Qt需要执行以下步骤: 安装Ubuntu操作系统 RK3288板子一般是采用Linux系统,安装Ubuntu是为了方便安装Qt和相关开发工具。 下载安装Qt 访问Qt官网下载适合RK3288的版本,然后安装到Ubuntu系统中。 更新系统依赖库 为了避免Q…...

Spring源码分析-Bean创建流程四

目录 一、前言 二、Bean实例化构造器的选择 1、createBeanInstance方法解读 2、autowireConstructor 二、BeanPostProcess四个实现中的哪里会用到 Autowired注解构造使用注意 三、实例化几种策略 1、instantiateBean入口 2、获取实例化策略并且进行实例化操作主要有以下…...

2023高质量Java面试题集锦:高级Java工程师面试八股汇总

人人都想进大厂,当然我也不例外。早在春招的时候我就有向某某某大厂投岗了不少简历,可惜了,疫情期间都是远程面试,加上那时自身也有问题,导致屡投屡败。突然也意识到自己肚子里没啥货,问个啥都是卡卡卡卡&a…...

5.1 栈Stack基于动态数组的Java实现

文章目录1.什么是栈?2.栈的应用场景3.栈的具体实现3.1 基于简单数组的实现3.2 动态数组的实现3.3 链表的实现3.4 Java动态数组实现栈结构4 项目地址1.什么是栈? 栈是一个有序的线性表,只能在栈顶进行操作插入和删除操作。所以也叫先进后出表…...

应用桌面图标快捷方式找不到了 用命令方式找到应用并创建快捷方式

这个方式可以创建任何桌面图标 1、按住 “win” R 弹出输入系统指令页面,如图: 在这一步输入指令 “%windir%\explorer.exe shell:::{4234d49b-0245-4df3-b780-3893943456e1}” 按回车 此时出现如下界面,找到你需要的应用然后右键创建桌面图…...

配置代理服务器

配置代理——方式一 俩台服务都准备完成 现在主要用来发起请求的第三方库都是axios 先下载引入axios 出现跨域问题,注意的一点是服务器是拿到数据,但是并没有返回 解决跨域问题 1.cors 这要麻烦后端人员,就是在响应数据时设置一个特殊的响…...

二叉树概念及基本功能实现

目录 一、二叉树概述 二、代码实现一棵二叉树: 三、二叉树的遍历 四、二叉树遍历代码实现 1.先序遍历: 2.中序遍历: 3.后序遍历: 4.层次遍历(一层一层遍历): 5.main方法执行 五、二叉…...

h5与APP交互

两端交互安卓:https://github.com/lzyzsd/JsBridge IOS:https://github.com/marcuswestin/WebViewJavascriptBridge 两者一起用的话会起冲突,需要判断一下是什么终端,然后分别调用, var u navigator.userAgent; var i…...

3.30--Redis之常用数据结构--整数集合(总结篇)------加油呀

整数集合是 Set 对象的底层实现之一。当一个 Set 对象只包含整数值元素,并且元素数量不大时,就会使用整数集这个数据结构作为底层实现 整数集合本质上是一块连续内存空间 typedef struct intset {//编码方式uint32_t encoding;//集合包含的元素数量uin…...

【Python语言基础】——Python 随机模块

Python语言基础——Python 随机模块 文章目录 Python语言基础——Python 随机模块一、Python 随机模块一、Python 随机模块 Python 有一个可用于制作随机数的内建模块。 random 模块有一组如下的方法: 方法 描述 seed() 初始化随机数生成器。 getstate() 返回随机数生成器的当…...