RabbitMQ初入门
1、RabbitMQ是什么
RabbitMQ是“实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。”(引自百度百科)
常用的消息队列有RabbitMQ、RocketMQ等等,下面是它们的对比图:

图片来源:https://www.cnblogs.com/fanBlog/p/12201472.html
换句话说,RabbitMQ是一个开源的消息队列中间件,它实现了高级消息队列协议(AMQP),可以在分布式系统中进行消息传递、异步通信和解耦。RabbitMQ是一个可靠、高效、可扩展的消息代理,可以用于构建高可用、高性能、可伸缩的应用程序。
官网地址:RabbitMQ: easy to use, flexible messaging and streaming — RabbitMQ
2、RabbitMQ的核心概念
-
消息:RabbitMQ中的消息是指要传递的数据,通常是一个字符串或者二进制数据。消息可以包含一些元数据,例如消息ID、时间戳、优先级等。
-
队列:队列是RabbitMQ中存储消息的地方。生产者将消息发送到队列中,消费者从队列中获取消息并进行处理。
-
消息队列(Message Queue):是将需要传输的数据(消息)与队列进行绑定,用队列先进先出机制来实现消息传递。消息队列由 生产者 和 消费者 两部分构成:
-
生产者主要负责产生消息并把消息放入队列中,再由消费者去处理。
-
消费者可以到指定队列中获取消息,或者订阅相应的队列,最后由MQ服务端进行消息推送。
-
-
交换机:交换机是消息的路由中心,它接收从生产者发来的消息,并根据路由规则将消息发送到一个或多个队列中。RabbitMQ支持多种类型的交换机,例如直连交换机、主题交换机、头交换机和扇形交换机。
-
绑定:绑定是交换机和队列之间的关系,它定义了消息从交换机路由到哪个队列中。一个交换机可以绑定多个队列,一个队列也可以被多个交换机绑定。
-
生产者:生产者是消息的发送方,它将消息发送到交换机或者队列中。
-
消费者:消费者是消息的接收方,它从队列中获取消息并进行处理。
生产者、消费者模型-mq的原理,举例

3、RabbitMQ的工作模型

图片来源:【精选】RabbitMQ(一)、基础篇_rabbitmq 5.7.3_普通人zzz~的博客-CSDN博客
4、RabbitMQ的优缺点
优点:
-
可靠性高:RabbitMQ支持持久化消息,即使在消息代理宕机时也能保证消息不会丢失。
-
灵活的路由:RabbitMQ支持多种类型的交换机和路由规则,可以根据业务需求进行灵活配置。
-
高可用性:RabbitMQ支持集群部署,可以实现高可用性和负载均衡。
-
多语言支持:RabbitMQ提供了多种客户端库,支持多种编程语言,例如Java、Python、Ruby等。
-
易于扩展:RabbitMQ可以通过添加节点和集群扩展来满足不同规模的应用需求。
缺点:
-
性能限制:RabbitMQ虽然支持高并发和高吞吐量的消息传递,但是在处理大量消息时,性能会受到限制。这是因为RabbitMQ需要频繁地进行磁盘IO操作,而磁盘IO是相对较慢的,会影响消息传递的速度。
-
配置复杂:RabbitMQ的配置相对来说比较复杂,需要了解交换机、队列、绑定等多个概念,并进行相应的配置。这对于初学者来说可能会增加一定的学习成本。
-
存储占用空间:由于RabbitMQ支持持久化消息,所以它需要占用一定的存储空间来存储消息。如果消息量很大,存储空间的占用也会相应增加。
-
不支持动态扩容:在RabbitMQ集群中,节点的数量是固定的,无法动态扩容。如果需要扩容,需要手动添加新节点,并进行相应的配置。
-
数据处理一致性问题
5、RabbitMQ的应用场景
-
异步任务处理:当系统需要处理一些耗时的任务时,可以使用RabbitMQ来实现异步任务处理。生产者将任务消息发送到RabbitMQ中,消费者从队列中获取任务消息并进行处理,这样可以避免任务阻塞主线程,提高系统的响应速度和并发能力。
-
分布式系统解耦:在一个复杂的分布式系统中,不同的模块之间可能存在依赖关系,使用RabbitMQ可以实现模块之间的解耦。模块之间通过发送和接收消息进行通信,不直接调用对方的接口,从而降低模块之间的耦合性,提高系统的可维护性和扩展性。
-
日志收集和分发:在分布式系统中,日志的收集和分发是一个重要的任务。通过将日志消息发送到RabbitMQ中,可以实现日志的集中存储和分发。消费者可以订阅感兴趣的日志消息,并将其存储到数据库或者发送到其他系统进行进一步处理。
-
消息通知和推送:当系统需要向用户发送通知或者推送消息时,可以使用RabbitMQ来实现消息的异步发送。生产者将消息发送到RabbitMQ中,消费者从队列中获取消息并进行推送,可以实现高效、可靠的消息通知和推送功能。
-
应用解耦和水平扩展:当系统需要进行水平扩展时,可以使用RabbitMQ来实现应用的解耦和负载均衡。多个相同的消费者可以同时从队列中获取消息进行处理,从而提高系统的吞吐量和可伸缩性。
6、⭐RabbitMQ的作用
6.1 削峰
在高并发场景下,流量突然增加会导致系统负载过高,甚至出现宕机等问题。使用RabbitMQ可以将请求分散到不同的消息队列中,通过设置队列的最大长度、超时时间等参数,实现流量控制和削峰的效果。
6.2 解耦
在分布式系统中,各个模块之间需要进行通信,但是直接依赖会导致系统的耦合度过高。使用RabbitMQ可以将不同模块之间的通信通过消息队列进行解耦,每个模块只需要关注自己需要的消息即可,从而提高了系统的灵活性和可维护性。
6.3 异步
在某些场景下,处理某些任务需要较长的时间,如果采用同步方式,会导致请求阻塞,降低系统的性能。使用RabbitMQ可以将任务放入消息队列中,异步地进行处理,从而提高了系统的并发性和吞吐量。
7、⭐安装RabbitMQ的docker容器
7.1 查询并拉取rabbitmq镜像
docker search rabbitmq
docker pull rabbitmq
7.2 创建rabbitmq数据存储文件夹data

7.3 创建运行容器

7.4 开放防火墙端口

7.5 进入rabbitmq容器
输入以下命令:

7.6 重启rabbitmq容器

7.7 访问浏览器管理页面

7.8 浏览器channel的异常和解决方案


测试,可正常访问

小结
总之,RabbitMQ是一款功能强大、可靠性高、易于使用和扩展的消息队列中间件,适合用于构建分布式系统中的异步通信和解耦。
参考:
https://baijiahao.baidu.com/s?id=1697221448518195951&wfr=spider&for=pc
绝对详细的 RabbitMQ入门,看完本系列就够了(一) - 知乎【精选】RabbitMQ(一)、基础篇_rabbitmq 5.7.3_普通人zzz~的博客-CSDN博客绝对详细的 RabbitMQ入门,看完本系列就够了(一) - 知乎
https://www.cnblogs.com/fanBlog/p/12201472.html
感谢阅读,码字不易,多谢点赞!如有不当之处,欢迎反馈指出,感谢!

相关文章:
RabbitMQ初入门
1、RabbitMQ是什么 RabbitMQ是“实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均…...
电脑定时关机
电脑定时关机 1.右键 管理 2. 3. 4. 5. shutdown.exe/s /f /t 06.点击完成就好了 7.这里面可以 看到定时任务和启动 右键有运行 结束 禁用...
【算法】滑动窗口题单——4.不定长滑动窗口(求子数组个数)
文章目录 前言2799. 统计完全子数组的数目解法1——枚举右端点,移动左端点解法2——枚举左端点,扩展右端点 713. 乘积小于 K 的子数组1358. 包含所有三种字符的子字符串数目2302. 统计得分小于 K 的子数组数目2537. 统计好子数组的数目2762. 不间断子数组…...
CMake aux_source_directory 学习
如下,prj是空文件夹; add.h; #include <iostream>using namespace std;int add1(int a, int b); num.h; int num1100; int num2301; add.cpp; #include "add.h"int add1(int i, int j) {return i j; } main.cpp&#x…...
Mybatis中延迟加载~
延迟加载: 等一会加载,在多表关联查询操作的时候可以使用到的一种方案,如果是单表操作就完全没有延迟加载的概念。 多表查询例如,查询用户和部门信息,如果我们仅仅只是需要用户的信息,而不需要用户对应的…...
【C语言】memmove()函数(拷贝重叠内存块函数详解)
🦄个人主页:修修修也 🎏所属专栏:C语言 ⚙️操作环境:Visual Studio 2022 目录 一.memmove()函数简介 1.函数功能 2.函数参数 1>.void * destination 2>.onst void * source 3>.size_t num 3.函数返回值 4.函数头文件 二.memmove()函数…...
04-流媒体-ffmpeg.c源码分析
ffmpeg.c是一个使用ffmpeg库的参考代码,实现了视频格式转换的功能,类似于我们常用的格式工产,源代码的的目录是: ffmpeg-4.2.2/fftools/ffmpeg.c 和前面的ffplay一样,我们分析其源代码,主要只是为了让读者了解ffmpeg.c此文件的大概流程,并且熟悉常用的ffmpeg库的API。 下…...
迭代器 Iterator
迭代器是一种设计模式,它用于遍历集合或容器中的元素,能够访问集合的元素而无需关心集合的内部结构: 特点: 封装集合访问:迭代器封装了对集合元素的访问,通过迭代器访问集合中的元素,而无需了…...
掌握CSS Flexbox,打造完美响应式布局,适配各种设备!
🎬 江城开朗的豌豆:个人主页 🔥 个人专栏 :《 VUE 》 《 javaScript 》 📝 个人网站 :《 江城开朗的豌豆🫛 》 ⛺️ 生活的理想,就是为了理想的生活 ! 目录 ⭐ 专栏简介 📘 文章引言 基…...
FlutterUnit 周边 | 收录排序算法可视化
theme: cyanosis 1. FlutterUnit 更新:排序算法可视化 排序算法可视化是用视图层表现出算法执行过程中排序的过程,感谢 编程的平行世界 在 《十几种排序算法的可视化效果,快来看看!👀》》 一文中提供的算法支持。我进行…...
代码随想录Day30 贪心05 LeetCode T435无重叠区间 T763划分字母区间 T56 合并区间
LeetCode T435 无重叠区间 题目链接:435. 无重叠区间 - 力扣(LeetCode) 题目思路: 这题思路和昨天的打气球类似,我们需要按照左区间或者右区间进行排序,然后哦判断第i个区间的左端点和第i-1个区间的右端点的大小关系,,如果大于等于,那么就无需操作,一旦…...
发展高质量存储力,中国高科技力量聚浪成潮
中国信息通信研究院指出,在全球数字化转型与产业变革的浪潮下,算力正在成为改变全球竞争格局的关键力量。而根据最新的《算力基础设施高质量发展行动计划》,算力是集信息计算力、数据存储力和网络运载力于一体的新型生产力。当前,…...
修改svc的LoadBalancer的IP引发的惨案
文章目录 背景修改externalIPs的操作api-server报错日志挽救教训 背景 k8s集群没有接外部负载均衡,部署istio的时候ingressgateway一直pending。 于是手动修改了这个lb svc的externalIP,于是k8s就崩了,如何崩的,且听我还道来。 …...
2520. 统计能整除数字的位数
2520. 统计能整除数字的位数 class Solution {public int countDigits(int num) {int res 0;int o num;while (num > 0) {if (o % (num % 10) 0) {res 1;}num num / 10;}return res;} }...
BeanUtils.copyProperties的用法
常见场景 我们如果有两个具有很多相同属性名的JavaBean对象a和b,想把a中的属性赋值到b,例如 接口中将接收到的前端请求参数XxxReqVo,我们想把这个入参转化为XxxQuery对象作为数据库的查询条件对象 传统做法是手动set,即 XxxQuery xxxQuer…...
【RabbitMQ 实战】12 镜像队列
一、镜像队列的概念 RabbitMQ的镜像队列是将消息副本存储在一组节点上,以提高可用性和可靠性。镜像队列将队列中的消息复制到一个或多个其他节点上,并使这些节点上的队列保持同步。当一个节点失败时,其他节点上的队列不受影响,因…...
PyCharm社区版安装
PyCharm社区版安装 到中国官网下载 https://www.jetbrains.com/zh-cn/pycharm/download/?sectionwindows 首次创建项目,会自动下载安装Python 3.9 社区版的区别 社区版的区别...
【LeetCode每日一题合集】2023.10.16-2023.10.22(只出现一次的数字Ⅲ)
文章目录 260. 只出现一次的数字 III⭐(异或)🐂2652. 倍数求和解法1——枚举模拟解法2—— O ( 1 ) O(1) O(1)容斥原理相似题目——1201. 丑数 III(二分查找容斥原理) 2530. 执行 K 次操作后的最大分数解法1——贪心优…...
尚硅谷大数据项目《在线教育之实时数仓》笔记003
视频地址:尚硅谷大数据项目《在线教育之实时数仓》_哔哩哔哩_bilibili 目录 第7章 数仓开发之ODS层 P015 第8章 数仓开发之DIM层 P016 P017 P018 P019 01、node001节点Linux命令 02、KafkaUtil.java 03、DimSinkApp.java P020 P021 P022 P023 第7章 数…...
【Linux】部署单体项目以及前后端分离项目(项目部署)
一、简介 以下就是Linux部署单机项目和前后端分离项目的优缺点,希望对你有所帮助。 1、Linux部署单机项目: 优点: 1.简化了系统管理:由于所有服务都在同一台机器上运行,因此可以简化系统管理和维护。 2.提高了性能&a…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
docker详细操作--未完待续
docker介绍 docker官网: Docker:加速容器应用程序开发 harbor官网:Harbor - Harbor 中文 使用docker加速器: Docker镜像极速下载服务 - 毫秒镜像 是什么 Docker 是一种开源的容器化平台,用于将应用程序及其依赖项(如库、运行时环…...
MySQL 隔离级别:脏读、幻读及不可重复读的原理与示例
一、MySQL 隔离级别 MySQL 提供了四种隔离级别,用于控制事务之间的并发访问以及数据的可见性,不同隔离级别对脏读、幻读、不可重复读这几种并发数据问题有着不同的处理方式,具体如下: 隔离级别脏读不可重复读幻读性能特点及锁机制读未提交(READ UNCOMMITTED)允许出现允许…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
Go 语言接口详解
Go 语言接口详解 核心概念 接口定义 在 Go 语言中,接口是一种抽象类型,它定义了一组方法的集合: // 定义接口 type Shape interface {Area() float64Perimeter() float64 } 接口实现 Go 接口的实现是隐式的: // 矩形结构体…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院查看报告小程序
一、开发环境准备 工具安装: 下载安装DevEco Studio 4.0(支持HarmonyOS 5)配置HarmonyOS SDK 5.0确保Node.js版本≥14 项目初始化: ohpm init harmony/hospital-report-app 二、核心功能模块实现 1. 报告列表…...
从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)
设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile,新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
