RabbitMQ初入门

news2024/9/23 19:24:16

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的核心概念

  1. 消息:RabbitMQ中的消息是指要传递的数据,通常是一个字符串或者二进制数据。消息可以包含一些元数据,例如消息ID、时间戳、优先级等。

  2. 队列:队列是RabbitMQ中存储消息的地方。生产者将消息发送到队列中,消费者从队列中获取消息并进行处理。

  3. 消息队列(Message Queue):是将需要传输的数据(消息)与队列进行绑定,用队列先进先出机制来实现消息传递。消息队列由 生产者 和 消费者 两部分构成:

    1. 生产者主要负责产生消息并把消息放入队列中,再由消费者去处理。

    2. 消费者可以到指定队列中获取消息,或者订阅相应的队列,最后由MQ服务端进行消息推送。

  4. 交换机:交换机是消息的路由中心,它接收从生产者发来的消息,并根据路由规则将消息发送到一个或多个队列中。RabbitMQ支持多种类型的交换机,例如直连交换机、主题交换机、头交换机和扇形交换机。

  5. 绑定:绑定是交换机和队列之间的关系,它定义了消息从交换机路由到哪个队列中。一个交换机可以绑定多个队列,一个队列也可以被多个交换机绑定。

  6. 生产者:生产者是消息的发送方,它将消息发送到交换机或者队列中。

  7. 消费者:消费者是消息的接收方,它从队列中获取消息并进行处理。

生产者、消费者模型-mq的原理,举例

3、RabbitMQ的工作模型

图片来源:【精选】RabbitMQ(一)、基础篇_rabbitmq 5.7.3_普通人zzz~的博客-CSDN博客

4、RabbitMQ的优缺点

优点

  1. 可靠性高:RabbitMQ支持持久化消息,即使在消息代理宕机时也能保证消息不会丢失。

  2. 灵活的路由:RabbitMQ支持多种类型的交换机和路由规则,可以根据业务需求进行灵活配置。

  3. 高可用性:RabbitMQ支持集群部署,可以实现高可用性和负载均衡。

  4. 多语言支持:RabbitMQ提供了多种客户端库,支持多种编程语言,例如Java、Python、Ruby等。

  5. 易于扩展:RabbitMQ可以通过添加节点和集群扩展来满足不同规模的应用需求。

缺点

  1. 性能限制:RabbitMQ虽然支持高并发和高吞吐量的消息传递,但是在处理大量消息时,性能会受到限制。这是因为RabbitMQ需要频繁地进行磁盘IO操作,而磁盘IO是相对较慢的,会影响消息传递的速度。

  2. 配置复杂:RabbitMQ的配置相对来说比较复杂,需要了解交换机、队列、绑定等多个概念,并进行相应的配置。这对于初学者来说可能会增加一定的学习成本。

  3. 存储占用空间:由于RabbitMQ支持持久化消息,所以它需要占用一定的存储空间来存储消息。如果消息量很大,存储空间的占用也会相应增加。

  4. 不支持动态扩容:在RabbitMQ集群中,节点的数量是固定的,无法动态扩容。如果需要扩容,需要手动添加新节点,并进行相应的配置。

  5. 数据处理一致性问题

5、RabbitMQ的应用场景

  1. 异步任务处理:当系统需要处理一些耗时的任务时,可以使用RabbitMQ来实现异步任务处理。生产者将任务消息发送到RabbitMQ中,消费者从队列中获取任务消息并进行处理,这样可以避免任务阻塞主线程,提高系统的响应速度和并发能力。

  2. 分布式系统解耦:在一个复杂的分布式系统中,不同的模块之间可能存在依赖关系,使用RabbitMQ可以实现模块之间的解耦。模块之间通过发送和接收消息进行通信,不直接调用对方的接口,从而降低模块之间的耦合性,提高系统的可维护性和扩展性。

  3. 日志收集和分发:在分布式系统中,日志的收集和分发是一个重要的任务。通过将日志消息发送到RabbitMQ中,可以实现日志的集中存储和分发。消费者可以订阅感兴趣的日志消息,并将其存储到数据库或者发送到其他系统进行进一步处理。

  4. 消息通知和推送:当系统需要向用户发送通知或者推送消息时,可以使用RabbitMQ来实现消息的异步发送。生产者将消息发送到RabbitMQ中,消费者从队列中获取消息并进行推送,可以实现高效、可靠的消息通知和推送功能。

  5. 应用解耦和水平扩展:当系统需要进行水平扩展时,可以使用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


感谢阅读,码字不易,多谢点赞!如有不当之处,欢迎反馈指出,感谢!

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

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

相关文章

23 行为型模式-迭代器模式

1 迭代器模式介绍 迭代器模式是我们学习一个设计时很少用到的、但编码实现时却经常使用到的行为型设计模式。在绝大多数编程语言中,迭代器已经成为一个基础的类库,直接用来遍历集合对象。在平时开发中,我们更多的是直接使用它,很…

C++学习 day--21 地震监测系统实现、内存泄漏检测工具

1、项目需求 地震监测系统主要是利用地震检波器收集到的地壳运动信息,从而预测和确定地震的震中以 及强度。 预测方法 地震检波器每隔固定的时间间隔采样一次预测地震的能量数据,并保存到文件中,地震监测 系统会从文件中读取相应的能量数据&…

第四章 文件管理 十二、虚拟文件系统

目录 一、虚拟文件系统图 二、虚拟文件系统的特点 三、存在的问题 四、文件系统挂载 一、虚拟文件系统图 二、虚拟文件系统的特点 1、向上层用户进程提供统一标准的系统调用接口,屏蔽底层具体文件系统的实现差异。 2、VFS要求下层的文件系统必须实现某些规定的…

Map集合 遍历:lambda方式

package day01;import java.util.*;public class Mapday1 {public static void main(String[] args) {/* HashMap 无序 不重复&#xff0c;会覆盖前面 无索引*/System.out.println("--------------------");Map<String, Integer> map new HashMap<>();m…

【DBeaver】建立连接报驱动问题

事件 在DBeaver中建立pgsqlite连接&#xff0c;测试连接时&#xff0c;报 can’t load driver class ‘org.postgresql.Driver’ 问题原因 pgsqlite数据库驱动与DBeaver版本不匹配 pg解决办法 在https://jdbc.postgresql.org/download/中下载最新版本的驱动&#xff0c;然…

【Java基础】反射机制与动态代理机制

反射机制与动态代理机制 文章目录 反射机制与动态代理机制1. 反射(Reflection)的概念1.1 反射概述1.2 反射的优缺点 2. 理解Class类并获取Class实例2.1 Class2.2 Class类的常用方法 3. 反射的基本应用3.1 应用1&#xff1a;创建运行时类的对象3.2 应用2&#xff1a;调用运行时类…

什么是恶意代码?

前言&#xff1a;本文旨在分享交流技术&#xff0c;在这里对恶意代码进行全面的介绍和讲解 目录 一.什么是恶意代码 二.恶意代码的发展史 三.恶意代码的相关定义 四.恶意代码攻击机制 PE病毒 PE文件的格式 脚本病毒 脚本文件隐藏方法 宏病毒 浏览器恶意代码 U盘病毒 …

Go基础——数组、切片、集合

目录 1、数组2、切片3、集合4、范围&#xff08;range&#xff09; 1、数组 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列&#xff0c;这种类型可以是任意的原始类型例如整型、字符串或者自定义类型。 Go 语言数组声明需要指定元素类型及元素个数&#xff0c;与…

docker - DockerFile 编写 指令

文章目录 前言docker - DockerFile 编写 指令1. FROM2. MAINTAINER3. RUN4. CMD5. LABEL6. EXPOSE7. ENV8. ADD9. COPY10. ENTRYPOINT11. VOLUME12. USER13. WORKDIR14. ARG15. ONBUILD16. STOPSIGNAL 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&am…

Virtual DOM

目录 Virtual DOM 前言 用法 代码 理解 Virtual DOM的工作原理&#xff1a; 为什么使用Virtual DOM? 哪些库/框架使用Virtual DOM? 总结 Virtual DOM&#xff08;虚拟DOM&#xff09;是一种编程概念&#xff0c;它是对真实DOM的轻量级抽象表示。在前端开发中&#x…

【软考】系统集成项目管理工程师(九)项目成本管理【4分】

一、成本概念 1、产品全生命周期成本 产品或系统的整个使用生命周期内&#xff0c;在获得阶段&#xff08;设计、生产、安装和测试等活动&#xff0c;即项目存续期间&#xff09;、运营与维护、生命周期结束时对产品的处置所发生的全部成本 2、成本类型 成本类型描述可变成…

【Matlab2016】Matlab中文版的下载、安装、激活(不建议安装过高版本!!)

这里写目录标题 首先双击R2016_win64.iso加载镜像文件双击setup.exe开始安装选择使用文件密钥安装填入密钥修改安装路径并记住此路径建议全部勾选等待安装完成 激活复制补丁到matlab路径下 创建快捷方式进入bin目录&#xff0c;找到matlab.exe 安装包 首先双击R2016_win64.iso加…

会声会影2023永久激活序列号密钥(支持各版本会声会影注册机)

会声会影2023永久激活序列号密钥(支持各版本)。会声会影2023是一款强大专业的视频编辑软件。会声会影2023产品序列号&#xff0c;支持专业版和旗舰版&#xff0c;可免费激活会声会影2023软件。会声会影2023序列号激活码目前网上很难找到了&#xff0c;这些会声会影序列号是小编…

如何编写一份完整的软件测试报告?

背景 作为测试从业者&#xff0c;编写测试用例&#xff0c;测试计划&#xff0c;测试报告都是必经之路&#xff0c;最近完成了年终述职以及版本准出&#xff0c;感觉测试报告或者各类报告真是职场人不可或缺的一项技能&#xff0c;趁着热乎劲&#x1f525;&#xff0c;写下一些…

Spring Cloud 实战 | 解密负载均衡Ribbon底层原理,包含实战源码

专栏集锦&#xff0c;大佬们可以收藏以备不时之需 Spring Cloud实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏&#xff1a;https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏&#xff1a;https:/…

车载音频ADI-ADSP21569音频DSP开发

车载音频ADI-ADSP21489音频DSP开发 是否需要申请加入数字音频系统研究开发交流答疑群(课题组)?可加我微信hezkz17, 本群提供音频技术答疑服务,+群赠送蓝牙音频,车载DSP音频项目核心开发资料, 1 芯片手册 2 电路原理图

fl studio2023最新版本如何设置中文?

FL Studio编曲软件真的是个神器&#xff0c;不过一开始打开看到全是英文&#xff0c;有点头大&#xff0c;对吧&#xff1f;其实切换成中文版超级简单&#xff0c;只需要几个步骤就搞定啦&#xff01;我自己也是用中文版的&#xff0c;觉得用起来更得心应手&#xff0c;效率也提…

分享一个基于asp.net的供销社农产品商品销售系统的设计与实现(源码调试 lw开题报告ppt)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人七年开发经验&#xff0c;擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等&#xff0c;大家有这一块的问题可以一起交流&#xff01; &#x1f495;&…

MySQL主从复制(基于GTID--事务ID方式)

目录 一、GTID相关概念1.GTID 是什么&#xff1f;2.GTID主从复制方式概念3.GTID的优缺点 二、GTID工作原理三、部署主从复制四、测试同步1.主库上新建数据库2.从库上查看是否同步成功 五、重设从库六、常见故障七、故障切换八、GTID的一些疑问1.为什么基于GTID的同步也要打开bi…