【学习笔记】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 串等等)
相关文章:
![](https://img-blog.csdnimg.cn/img_convert/a78c6d3204eaa64a29aa750973c68c6b.png)
【学习笔记】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运行环境搭建…...
![](https://www.ngui.cc/images/no-images.jpg)
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新节点插入较…...
![](https://www.ngui.cc/images/no-images.jpg)
SQL 在PostgreSQL中使用SQL将多行连接成数组
在本文中,我们将介绍如何使用SQL语言在PostgreSQL数据库中将多行数据连接成一个数组。在开发和分析应用程序时,我们经常需要将数据库中的多个行合并为一个,以便更方便地进行处理和分析。PostgreSQL提供了一种名为ARRAY_AGG的聚合函数…...
![](https://www.ngui.cc/images/no-images.jpg)
Ajax技术实现前端开发
一、原生AJAX 1.1AJAX 简介 AJAX 全称为Asynchronous JavaScript And XML,就是异步的JS 和XML。 通过AJAX 可以在浏览器中向服务器发送异步请求,最大的优势:无刷新获取数据。 AJAX 不是新的编程语言,而是一种将现有的标准组合在一起使用的新方式。 1.2XML 简介 XML 可扩…...
![](https://www.ngui.cc/images/no-images.jpg)
WebMail:网页注册成功发送邮件
1.特别注意 isELIgnored"false" 如果没有这个El表达式无法识别 2.pre work pox.xml <dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>…...
![](https://img-blog.csdnimg.cn/1ea79583d6d643eeb7b0ed4aaba08d1d.png)
Electron之集成vue+vite开发桌面程序
在electron中集成vue开发桌面程序 使用我们之前创建的electron项目 创建vue 项目 命令行进入electron根目录 执行下面命令 npm create vitelatest vue -- --template vue这样就创建了一个vue项目,文件名是vue,命令行进入vue下,执行下面命…...
![](https://img-blog.csdnimg.cn/4b93f59878484fcba9d910cf76052ae0.png#pic_center)
pycharm社区版创建Django项目的一种方式
pycharm社区版创建Django项目 pycharm创建New project安装django,如果安装过可略过安装完成后查看安装情况生成Django项目需要的文件这里注意生成语句后面的 . 不可以省略 生成文件后,框架搭建完成,配置启动我这里在配置完后,报了…...
![](https://img-blog.csdnimg.cn/ef9746f9f50c444ea3284b43ae72f84b.png)
Python configparser模块使用教程
文章目录 .ini 拓展名文件简介.ini 文件格式1. 节2. 参数3. 注解 configparser 模块简介configparser 模块的初始化和读取获取 ini 中所有 section获取 section 下的 key获取 section 下的 value获取指点section的所用配置信息修改某个key,如果不存在则会出创建检查…...
![](https://www.ngui.cc/images/no-images.jpg)
Kotlin + 协程 + Room 结合使用
文章目录 前言集成Room结合协程的使用总结 一、前言, 现在kotlin 是趋势,那必然就要用到协程,还有就是随着jetpack 的发力,带来了很多好用的库,比如今天提到Room,是一个类似greenDao的数据库。它不但支持kotlin协程…...
![](https://img-blog.csdnimg.cn/ebd2b15c34e94d7b87b69d1a4abc5e43.png)
网工记背命令(6)----链路聚合配置
目录 1.配置手工负载分担模式链路聚合 2.配置LACP模式的链路聚合 3.HUAWEI设备与C厂商设备对接 链路聚合(Link Aggregation)是将多条物理链路捆绑在一起成为一条逻辑链路,从而增加链路带 宽的技术。 常用配置命令 1、执行命令 interface …...
![](https://img-blog.csdnimg.cn/45dda18a952b438494ae50218f64061d.png)
使用 Service 把前端连接到后端
使用 Service 把前端连接到后端 如何创建前端(Frontend)微服务和后端(Backend)微服务。后端微服务是一个 hello 欢迎程序。 前端通过 nginx 和一个 Kubernetes 服务暴露后端所提供的服务。 使用部署对象(Deployment ob…...
![](https://www.ngui.cc/images/no-images.jpg)
vue 如何优化首页的加载速度?vue 首页白屏是什么问题引起的?如何解决呢?
vue 如何优化首页的加载速度? 路由懒加载ui框架按需加载gzip压缩 vue首页白屏是什么问题引起的 第一种,打包后文件引用路径不对,导致找不到文件报错白屏 解决办法:修改一下config下面的index.js中bulid模块导出的路径。因为in…...
![](https://img-blog.csdnimg.cn/4e098977f40649d8ab474785a8a04c02.png)
Android平台GB28181设备接入模块之SmartGBD
大牛直播SDK研发的Android平台GB28181设备接入SDK(SmartGBD),可实现不具备国标音视频能力的 Android终端,通过平台注册接入到现有的GB/T28181—2016服务,可用于如执法记录仪、智能安全帽、智能监控、智慧零售、智慧教育…...
![](https://www.ngui.cc/images/no-images.jpg)
JVM第十三讲:调试排错 - JVM 调优参数
调试排错 - JVM 调优参数 本文是JVM第十三讲,调试排错 - JVM 调优参数。对JVM涉及的常见的调优参数和垃圾回收参数进行阐述。 文章目录 调试排错 - JVM 调优参数1、Jvm参数2、垃圾回收 问题1:线上ECS治理问题2:白龙马线上服务机JVM参数配置&a…...
![](https://img-home.csdnimg.cn/images/20230724024159.png?origin_url=%2F%2Fupload-images.jianshu.io%2Fupload_images%2F1903459-481eca28a63c169d.png%3FimageMogr2%2Fauto-orient%2Fstrip%7CimageView2%2F2%2Fw%2F496%2Fformat%2Fwebp&pos_id=UARy1Zf7)
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 …...
![](https://www.ngui.cc/images/no-images.jpg)
顺子日期(蓝桥杯)
文章目录 顺子日期问题描述答案:14字符串解题CC语言指针C语言函数 数组解题 顺子日期 问题描述 本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。 小明特别喜欢顺子。顺子指的就是连续的三个数字:123、…...
![](https://img-blog.csdnimg.cn/5d36ba76501d4ecd9aaae22eeaac6d51.png)
攻防世界web篇-unserialize3
得出php代码残篇 将代码补全后再在线php运行工具中进行运行 在浏览器输入后得到下面的界面 这里需要将O:4:“xctf”:1:{s:4:“flag”;s:3:“111”;} 改为 O:4:“xctf”:2:{s:4:“flag”;s:3:“111”;}...
![](https://www.ngui.cc/images/no-images.jpg)
微信小程序 onLoad和onShow的区别
在微信小程序中,onLoad() 和 onShow() 是两个常用的生命周期函数,用于监听页面的加载和显示事件。这两个函数的区别如下: 触发时机 onLoad() 函数只会在页面加载时触发一次,而 onShow() 函数每次页面显示时都会被触发。因此&#…...
![](https://img-blog.csdnimg.cn/bdea603dcab24d72b78ca87acf5b00da.png)
elementui select组件下拉框底部增加自定义按钮
elementui select组件下拉框底部增加自定义按钮 el-select组件的visible-change 事件(下拉框出现/隐藏时触发) <el-selectref"select":value"value"placeholder"请选择"visible-change"visibleChange">&…...
![](https://www.ngui.cc/images/no-images.jpg)
深入理解闭包:原理、应用与最佳实践
1、 什么是闭包? 如果一个函数内部定义了另一个函数,并且内部函数引用了外部函数的变量,那么内部函数就形成了一个闭包。 def outer_function(x):# 外部函数接受一个参数 x 是自由变量# seed 也是一个自由变量seed 10def inner_function(y…...
![](https://www.ngui.cc/images/no-images.jpg)
[NSSCTF 2nd]Math
原题py: from secret import flag from Crypto.Util.number import * import gmpy2length len(flag) flag1 flag[:length//2] flag2 flag[length//2:] e 65537m1 bytes_to_long(flag1) p getPrime(512) q getPrime(512) n p*q phi (p-1)*(q-1) d gmpy2.i…...
![](https://csdnimg.cn/release/blog_editor_html/release2.3.6/ckeditor/plugins/CsdnLink/icons/icon-default.png?t=N7T8)
uml知识点学习
https://zhuanlan.zhihu.com/p/659911315https://zhuanlan.zhihu.com/p/659911315软件工程分析设计图库目录 - 知乎一、结构化绘图1. 结构化——数据流图Chilan Yuk:1. 结构化——数据流图2. 结构化——数据字典Chilan Yuk:2. 结构化——数据字典3. 结构…...
![](https://img-blog.csdnimg.cn/338f48404273405eb862cb04a95b2573.png)
JAVA学习日记1——JAVA简介及第一个java程序
简单记忆 JAVA SE :标准版,核心基础 JAVA EE:企业版,进阶 JDK:Java Development Kit,Java开发工具包,包含JRE JRE:Java Runtime Environment,Java运行时环境ÿ…...
![](https://www.ngui.cc/images/no-images.jpg)
Linux命令(102)之less
linux命令之less 1.less介绍 linux命令less是一个文本文件查看工具,它以一种交互的方式,逐页地显示文本文件的内容,并且可以在文件中进行搜索等定位 2.less用法 less [参数] filename less参数 参数说明-N显示每行的行号-i忽略搜索时的大…...
![](https://www.ngui.cc/images/no-images.jpg)
vue多条件查询
<template><div><input type"text" v-model"keyword" placeholder"关键字"><select v-model"category"><option value"">所有分类</option><option v-for"cat in categories&q…...
![](https://www.ngui.cc/images/no-images.jpg)
c 语言基础:L1-038 新世界
这道超级简单的题目没有任何输入。 你只需要在第一行中输出程序员钦定名言“Hello World”,并且在第二行中输出更新版的“Hello New World”就可以了。 输入样例: 无输出样例: Hello World Hello New World 程序源码: #incl…...
![](https://img-blog.csdnimg.cn/5be68b45e6384af4aad3f7fd7302c411.png#pic_center)
计算机算法分析与设计(13)---贪心算法(多机调度问题)
文章目录 一、问题概述1.1 思路分析1.2 实例分析 二、代码编写 一、问题概述 1.1 思路分析 1. 设有 n n n 个独立的作业 1 , 2 , … , n {1, 2, …, n} 1,2,…,n,由 m m m 台相同的机器 M 1 , M 2 , … , M m {M_1, M_2, …, M_m} M1,M2,…,Mm 进行加工处…...
![](https://img-blog.csdnimg.cn/8f5eb907d28f4805bb06f10748bc6119.png)
小程序canvas层级过高真机遮挡组件的解决办法
文章目录 问题发现真机调试问题分析问题解决改造代码效果展示 问题发现 在小程序开发中需要上传图片进行裁剪,在实际真机调试中发现canvas层遮挡住了生成图片的按钮。 问题代码 <import src"../we-cropper/we-cropper.wxml"></import> <…...
![](https://img-blog.csdnimg.cn/cec310283c9747c5af9468cfcbda44ff.png)
番外8.1 配置+管理文件系统
Task01: Linux 文件系统结构; 可以进行Linux操作系统的文件权限管理与方式切换,可以应用磁盘与文件权限管理工具; 01:常见文件系统类型(Ext4[rhel6默认文件管理系统], 存储容量1 EB1073741824 GB; XFS[rhel 7/8默认的文…...
![](https://img-blog.csdnimg.cn/d66485ed62de456caa0ec9a1a4812d7d.webp)
互联网Java工程师面试题·Java 总结篇·第八弹
目录 72、用 Java 的套接字编程实现一个多线程的回显(echo)服务器。 73、XML 文档定义有几种形式?它们之间有何本质区别?解析XML 文档有哪几种方式? 74、你在项目中哪些地方用到了 XML? 72、用 Java 的套…...
![](/images/no-images.jpg)
房山手机网站建设/seo外包公司报价
坑。 我想找的是一个网站,输入两种颜色之后,能够生成合并的颜色。...
![](/images/no-images.jpg)
用手机做网站视频/全网营销国际系统
性能测试中关键指标的监控与分析 https://blog.csdn.net/huangjin0507/article/details/51878559 性能测试指标及常用的监控工具 https://blog.csdn.net/gzh0222/article/details/7258661 转载于:https://www.cnblogs.com/highpointengineer/p/10953617.html...
![](/images/no-images.jpg)
如何汉化wordpress插件/武汉网站维护公司
在GTA-VC(侠盗猎车-罪恶都市)中,能够用秘籍调出来的汽车有很多,其中最不常用的大概就是TRASHMASTER(用秘籍RUBBISHCAR调出来的垃圾运输车)。 它又大,又笨,的确很“垃圾”。 摸索中发现改进方法,化腐朽为神奇࿰…...
![](/images/no-images.jpg)
网站备案有什么风险/网站的seo是什么意思
编辑器选择最近在学习ReactJS,这东西确实不错,但是在实际开发中却有很多问题。不是ReactJS本身的问题,而是开发环境,目前而言并没发现一个真正完美支持JSX语法的编辑器或IDE,这对于ReactJS开发者来说无疑是一个很头疼的…...
![](https://img-blog.csdnimg.cn/img_convert/54d140488f1a94378e4b4aa8487e174a.png)
网架加工安装一体的公司/网站整体优化
对象属性的加强:可以通过new Object(),{}) 包含的一个由零个或多个对象属性名和其关联值组成的一个逗号分隔的列表构成。上面那句话说的是如何产生一个新的对象。下面代码。a就是一个空对象,空对象只有一个属性。那就是_proto_使用object.cre…...
![](https://img-blog.csdnimg.cn/915e2922bbd14ee58ac195b4f4b3d251.png)
html5响应式手机网站/百度官网入口
给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] …...