【学习笔记】RabbitMQ01:基础概念认识以及快速部署
参考资料
- RabbitMQ官方网站
- RabbitMQ官方文档
- 噼咔噼咔-动力节点教程
文章目录
- 一、认识RabbitMQ
- 1.1 消息中间件(MQ = Message Queue 消息队列
- 1.2 主流的消息中间件
- 1.3 MQ的应用场景
- 1.3.1 异步处理
- 1.3.2 系统解耦
- 1.3.3 流量削峰
- 1.3.4 日志处理
- 二、RabbitMQ运行环境搭建
- 2.1 了解版本兼容问题
- 2.2 Dokcer安装
- 2.2.1 docker-compose.yml
- 2.2.3 启动
- 2.3 WEB控制台简介
- 2.3.1 页头信息
- 2.4 admin页面
- 2.4.1 用户标签
- 2.4.2 Virtual hosts (虚拟主机
- 三、RabbitMQ工作模型
- 3.1 快速理解工作流程
- 3.2 快速理解消息中间件 broker 的构成
- 3.3 消息队列的核心三要素
- 3.3.1 生产者 producer
- 3.3.2 消费者 consumer
- 3.3.3 代理 broker
- 3.4 RabbitMQ的基础概念名词
- 3.4.1 连接(Connection )
- 3.4.2 信道(Channel)
- 3.4.3 虚拟主机( Virtual host )
- 3.4.4 交换机( Exchange)
- 3.4.5 路由键( Routing Key )
- 3.4.6 绑定( Binding )
- 3.4.7 队列 ( Queue )
- 3.4.8 消息(Message )
一、认识RabbitMQ
1.1 消息中间件(MQ = Message Queue 消息队列
简单来说,消息中间件就是指保存数据的一个容器(服务器),可以用于两个系统之间的数据传递。
消息中间件一般有三个主要对象:
- 生产者:producer
- 消费者:consumer
- 消息代理(也叫消息队列、消息服务器):broker
生产者发送信息到消息服务器,然后消费者会从消息代理中获取数据并进行处理。关系图如下。
其中,broker作为独立的中间件,是不需要我们手动编写的。

1.2 主流的消息中间件
- RabbitMQ
- kafka(
丝线交织 - RocketMQ(java,阿里开源,实战丰富
- pulsar(最新流行
1.3 MQ的应用场景
1.3.1 异步处理
在企业级java开发中,有很多需要异步线程处理的场景,这些场景如果比较简单且低负载,我们使用多线程,配合线程池即可很好是胜任。
但是如果出现大流量、高并发的数据传递时,使用消息中间件就很有必要了。
比如动力节点提到的这个场景:

- 按照普通的同步流程,这一系列操作会造成系统的阻塞,用户点击下订单后需要等待全部流程结束
- 而使用MQ,就可以实现异步处理,生产者只需要处理下订单即可,剩下的交给MQ来管理。
1.3.2 系统解耦
MQ可以作为字面意义的消息中间件,负责调度不同系统之间的交互请求,通过消息进行业务流转(而不是不同的系统之间直接调用)。
- 起到了类似中转调度中心的作用。
- 甚至不同的系统也可以使用不同的语言进行开发

1.3.3 流量削峰
用于QPS极高的情况,比如双十一订单量暴增的时候,如果直接将用户的请求打到数据库,则会造成极大的数据库压力。
使用MQ匀速消费可以将QPS降低到一个系统可接受的水平,保证系统的稳定运行。

1.3.4 日志处理
主要是kafka这个服务器来做。
如果系统采用微服务处理,(比如有1000个微服务)每个单独的服务都会有大量的日志,如果要定位异常就需要每台服务器都要翻找日志,kafka解决了大量日志传输的问题,给出了ELK日志解决方案:

将所有的日志通过kafka集中到一个地方进行查看。
拓展阅读: ELK日志分析系统
由以下三个中间件组成
- Elasticsearch
- Logstash
- Kibana
具体详解:
https://blog.csdn.net/weixin_49022211/article/details/109514485
https://blog.csdn.net/zkc7441976/article/details/115868050
二、RabbitMQ运行环境搭建
为了快速学习,使用docker快速部署
2.1 了解版本兼容问题
https://www.rabbitmq.com/which-erlang.html
2.2 Dokcer安装
参考原文链接:https://blog.csdn.net/qq_39340792/article/details/117715984
2.2.1 docker-compose.yml
version: '3.1'
services:rabbitmq:restart: alwaysimage: rabbitmq:managementcontainer_name: rabbitmqhostname: rabbitports:- 5672:5672- 15672:15672environment:TZ: Asia/ShanghaiRABBITMQ_DEFAULT_USER: rabbitRABBITMQ_DEFAULT_PASS: 123456volumes:- ./data:/var/lib/rabbitmq- ./conf:/etc/rabbitmq
注意:./conf目录即配置挂载目录需事先创建好,如果未事先创建或是空文件夹启动时会报错。
可以先不挂载该目录启动,然后 通过 docker cp 命令将配置目录拷贝出来。
示例:
docker cp rabbitmq:/etc/rabbitmq ./conf
2.2.3 启动
执行 docker-compose up -d命令启动。
浏览器访问 http://localhost:15672/ 进入RabbitMQ Management 页面。输入上面的用户名和密码登录。
页面如下

2.3 WEB控制台简介
2.3.1 页头信息
标签页分别是
- 概述 overview
- 连接 connections
- 信道 channels
- 交换机 exchanges
- 队列 queues
- 系统配置 admin


2.4 admin页面
2.4.1 用户标签

2.4.2 Virtual hosts (虚拟主机

三、RabbitMQ工作模型
作为rabbitMQ的核心重点,理解工作模型有助于快速上手

3.1 快速理解工作流程
大致的工作流程前面已经提到了——

那么在上图中可以发现生产者是如何具体将消息传达到消费者中的。大致流程简单描述如下
- 首先,生产者通过虚拟信道和虚拟主机中的交换机建立连接
- 同时,消费者也通过虚拟信道和虚拟主机件的消息队列建立连接
- 生产者的消息,通过交换机传递到消息队列中,消费者从消息队列中接受消息
至此完成的消息的传递
3.2 快速理解消息中间件 broker 的构成
视频给了一个很形象的类比。有助于我们理解mq的基本构成
| rabbitMQ服务器 | Mysql服务器 |
|---|---|
| 一个服务器可以创建多个不同的虚拟主机 | 一个服务器可以创建多个不同的数据库 |
| 一个虚拟机可以有多个不同的消息队列 | 一个数据库可以有多个不同的表格 |
| 队列中可以存储多条消息 | 表格中可以存储多条记录 |
3.3 消息队列的核心三要素
这三要素是所有MQ中间件通用
3.3.1 生产者 producer
发送消息的应用。(可以是java程序,也可以是其他语言的程序
3.3.2 消费者 consumer
接受消息的应用。(可以是java程序,也可以是其他语言的程序
3.3.3 代理 broker
即消息服务器,消息中间件,也叫消息队列。
rabbitMQ server 就是 message broker
3.4 RabbitMQ的基础概念名词
3.4.1 连接(Connection )
连接 RabbitMo 服务器的TCP 长连接
3.4.2 信道(Channel)
连接中的一个虚拟通道,消息队列发送或者接收消息时,都是通过信道进行的;
3.4.3 虚拟主机( Virtual host )
一个虚拟分组,在代码中就是一个字符串。
当多个不同的用户使用同一个RabbitMQ 服务时,可以划分出多个 Virtual host。每个用户在自己的 Virtual host 创建 exchange/queue 等;
(分类比较清晰、相互隔离)
3.4.4 交换机( Exchange)
交换机负责从生产者接收消息,并根据交换机类型分发到对应的消息队列中,起到一个路由的作用
3.4.5 路由键( Routing Key )
交换机根据路由键来决定消息分发到哪个队列,路由键是消息的目的地址
也就是说其实在每一个channel中都有一个路由key,通过这个key就可以快速定位到具体的队列。避免了消息乱发队列的情况。
3.4.6 绑定( Binding )
绑定是队列和交换机的一个关联连接(关联关系)
3.4.7 队列 ( Queue )
存储消息的缓存队列
3.4.8 消息(Message )
由生产者通过 Rabbitmq 发送给消费者的信息; (消息可以任何数据字符串、user 对象,json 串等等)
相关文章:
【学习笔记】RabbitMQ01:基础概念认识以及快速部署
参考资料 RabbitMQ官方网站RabbitMQ官方文档噼咔噼咔-动力节点教程 文章目录 一、认识RabbitMQ1.1 消息中间件(MQ Message Queue 消息队列1.2 主流的消息中间件1.3 MQ的应用场景1.3.1 异步处理1.3.2 系统解耦1.3.3 流量削峰1.3.4 日志处理 二、RabbitMQ运行环境搭建…...
Java数据结构之第二十章、手撕平衡AVL树
目录 一、二叉平衡树 1.1二叉搜索树回顾以及性能分析 1.1.1二叉搜索树的概念 1.2二叉搜索树的查找 1.3二叉树查询性能分析 二、AVL树 2.1AVL树的概念 2.2AVL树节点的定义 2.3AVL树的插入 2.4AVL树的旋转 2.4.1新节点插入较高左子树的左侧---右单旋 2.4.2新节点插入较…...
SQL 在PostgreSQL中使用SQL将多行连接成数组
在本文中,我们将介绍如何使用SQL语言在PostgreSQL数据库中将多行数据连接成一个数组。在开发和分析应用程序时,我们经常需要将数据库中的多个行合并为一个,以便更方便地进行处理和分析。PostgreSQL提供了一种名为ARRAY_AGG的聚合函数…...
Ajax技术实现前端开发
一、原生AJAX 1.1AJAX 简介 AJAX 全称为Asynchronous JavaScript And XML,就是异步的JS 和XML。 通过AJAX 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。 AJAX 不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。 1.2XML 简介 XML 可扩…...
WebMail:网页注册成功发送邮件
1.特别注意 isELIgnored"false" 如果没有这个El表达式无法识别 2.pre work pox.xml <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>…...
Electron之集成vue+vite开发桌面程序
在electron中集成vue开发桌面程序 使用我们之前创建的electron项目 创建vue 项目 命令行进入electron根目录 执行下面命令 npm create vitelatest vue -- --template vue这样就创建了一个vue项目,文件名是vue,命令行进入vue下,执行下面命…...
pycharm社区版创建Django项目的一种方式
pycharm社区版创建Django项目 pycharm创建New project安装django,如果安装过可略过安装完成后查看安装情况生成Django项目需要的文件这里注意生成语句后面的 . 不可以省略 生成文件后,框架搭建完成,配置启动我这里在配置完后,报了…...
Python configparser模块使用教程
文章目录 .ini 拓展名文件简介.ini 文件格式1. 节2. 参数3. 注解 configparser 模块简介configparser 模块的初始化和读取获取 ini 中所有 section获取 section 下的 key获取 section 下的 value获取指点section的所用配置信息修改某个key,如果不存在则会出创建检查…...
Kotlin + 协程 + Room 结合使用
文章目录 前言集成Room结合协程的使用总结 一、前言, 现在kotlin 是趋势,那必然就要用到协程,还有就是随着jetpack 的发力,带来了很多好用的库,比如今天提到Room,是一个类似greenDao的数据库。它不但支持kotlin协程…...
网工记背命令(6)----链路聚合配置
目录 1.配置手工负载分担模式链路聚合 2.配置LACP模式的链路聚合 3.HUAWEI设备与C厂商设备对接 链路聚合(Link Aggregation)是将多条物理链路捆绑在一起成为一条逻辑链路,从而增加链路带 宽的技术。 常用配置命令 1、执行命令 interface …...
使用 Service 把前端连接到后端
使用 Service 把前端连接到后端 如何创建前端(Frontend)微服务和后端(Backend)微服务。后端微服务是一个 hello 欢迎程序。 前端通过 nginx 和一个 Kubernetes 服务暴露后端所提供的服务。 使用部署对象(Deployment ob…...
vue 如何优化首页的加载速度?vue 首页白屏是什么问题引起的?如何解决呢?
vue 如何优化首页的加载速度? 路由懒加载ui框架按需加载gzip压缩 vue首页白屏是什么问题引起的 第一种,打包后文件引用路径不对,导致找不到文件报错白屏 解决办法:修改一下config下面的index.js中bulid模块导出的路径。因为in…...
Android平台GB28181设备接入模块之SmartGBD
大牛直播SDK研发的Android平台GB28181设备接入SDK(SmartGBD),可实现不具备国标音视频能力的 Android终端,通过平台注册接入到现有的GB/T28181—2016服务,可用于如执法记录仪、智能安全帽、智能监控、智慧零售、智慧教育…...
JVM第十三讲:调试排错 - JVM 调优参数
调试排错 - JVM 调优参数 本文是JVM第十三讲,调试排错 - JVM 调优参数。对JVM涉及的常见的调优参数和垃圾回收参数进行阐述。 文章目录 调试排错 - JVM 调优参数1、Jvm参数2、垃圾回收 问题1:线上ECS治理问题2:白龙马线上服务机JVM参数配置&a…...
Android Gradle权威指南读书笔记
第一章 Gradle入门 生成Gradle Wrapper 命令:gradle wrapper --gradle-version 版本号自定义Gradle Wrapper task wrapper(type : Wrapper) { gradleVersion 2.4 archiveBase GRADLE USER HOME archivePath wrapper/dists distributionBase GRADLE USER HOME …...
顺子日期(蓝桥杯)
文章目录 顺子日期问题描述答案:14字符串解题CC语言指针C语言函数 数组解题 顺子日期 问题描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小明特别喜欢顺子。顺子指的就是连续的三个数字:123、…...
攻防世界web篇-unserialize3
得出php代码残篇 将代码补全后再在线php运行工具中进行运行 在浏览器输入后得到下面的界面 这里需要将O:4:“xctf”:1:{s:4:“flag”;s:3:“111”;} 改为 O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;}...
微信小程序 onLoad和onShow的区别
在微信小程序中,onLoad() 和 onShow() 是两个常用的生命周期函数,用于监听页面的加载和显示事件。这两个函数的区别如下: 触发时机 onLoad() 函数只会在页面加载时触发一次,而 onShow() 函数每次页面显示时都会被触发。因此&#…...
elementui select组件下拉框底部增加自定义按钮
elementui select组件下拉框底部增加自定义按钮 el-select组件的visible-change 事件(下拉框出现/隐藏时触发) <el-selectref"select":value"value"placeholder"请选择"visible-change"visibleChange">&…...
深入理解闭包:原理、应用与最佳实践
1、 什么是闭包? 如果一个函数内部定义了另一个函数,并且内部函数引用了外部函数的变量,那么内部函数就形成了一个闭包。 def outer_function(x):# 外部函数接受一个参数 x 是自由变量# seed 也是一个自由变量seed 10def inner_function(y…...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
IT供电系统绝缘监测及故障定位解决方案
随着新能源的快速发展,光伏电站、储能系统及充电设备已广泛应用于现代能源网络。在光伏领域,IT供电系统凭借其持续供电性好、安全性高等优势成为光伏首选,但在长期运行中,例如老化、潮湿、隐裂、机械损伤等问题会影响光伏板绝缘层…...
【开发技术】.Net使用FFmpeg视频特定帧上绘制内容
目录 一、目的 二、解决方案 2.1 什么是FFmpeg 2.2 FFmpeg主要功能 2.3 使用Xabe.FFmpeg调用FFmpeg功能 2.4 使用 FFmpeg 的 drawbox 滤镜来绘制 ROI 三、总结 一、目的 当前市场上有很多目标检测智能识别的相关算法,当前调用一个医疗行业的AI识别算法后返回…...
Java多线程实现之Thread类深度解析
Java多线程实现之Thread类深度解析 一、多线程基础概念1.1 什么是线程1.2 多线程的优势1.3 Java多线程模型 二、Thread类的基本结构与构造函数2.1 Thread类的继承关系2.2 构造函数 三、创建和启动线程3.1 继承Thread类创建线程3.2 实现Runnable接口创建线程 四、Thread类的核心…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...
Linux系统部署KES
1、安装准备 1.版本说明V008R006C009B0014 V008:是version产品的大版本。 R006:是release产品特性版本。 C009:是通用版 B0014:是build开发过程中的构建版本2.硬件要求 #安全版和企业版 内存:1GB 以上 硬盘…...
Python实现简单音频数据压缩与解压算法
Python实现简单音频数据压缩与解压算法 引言 在音频数据处理中,压缩算法是降低存储成本和传输效率的关键技术。Python作为一门灵活且功能强大的编程语言,提供了丰富的库和工具来实现音频数据的压缩与解压。本文将通过一个简单的音频数据压缩与解压算法…...
Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
boost::filesystem::path文件路径使用详解和示例
boost::filesystem::path 是 Boost 库中用于跨平台操作文件路径的类,封装了路径的拼接、分割、提取、判断等常用功能。下面是对它的使用详解,包括常用接口与完整示例。 1. 引入头文件与命名空间 #include <boost/filesystem.hpp> namespace fs b…...
