【RabbitMQ】基本概念以及安装教程

news/2024/9/16 7:39:30/ 标签: rabbitmq, 分布式

1. 什么是MQ

MQ( Message queue),从字面意思上看,本质是个队列,FIFO 先入先出,只不过队列中存放的内容是消息(message)而已.消息可以非常简单,比如只包含文本字符串,JSON等,也可以很复杂,比如内嵌对象.MQ多用于分布式系统之间进行通信
系统之间的调用通常有两种方式: 一种是同步通信 另外一种是 异步通信

同步通信

同步通信就是直接调用对方的服务,数据从一端发出后立即就可以达到另一端。

异步通信

数据从一端发出后,先进入一个容器进行临时存储,当达到某种条件后,再由这个容器发送给另一端.容器的一个具体实现就是MQ(message queue)

而Rabbit是MQ的一种实现

2. MQ的作用

MQ主要工作是接收并转发消息,在不同的应用场景下可以展现不同的作用。

  • 1.异步解耦: 在业务流程中,一些操作可能非常耗时,但并不需要即时返回结果,可以借助MO把这些操作异步化,比如 用户注册后发送注册短信或邮件通知,可以作为异步任务处理,而不必等待这些操作完成后才告知用户注册成功.
  • 2.流量削峰: 在访问量剧增的情况下,应用仍然需要继续发挥作用,但是这样的突发流量并不常见.如果以能处理这类峰值为标准而投入资源,无疑是巨大的浪费,使用MO能够使关键组件支撑突发访问压力,不会因为突发流量而崩溃,比如秒杀或者促销活动,可以使用MQ来控制流量,将请求排队,然后系统根据自己的处理能力逐步处理这些请求.
  • 3.消息分发:当多个系统需要对同一数据做出响应时,可以使用MQ进行消息分发,比如支付成功后,支付系统可以向MQ发送消息,其他系统订阅该消息,而无需轮询数据库.
  • 4.延迟通知: 在需要在特定时间后发送通知的场景中,可以使用MQ的延迟消息功能,比如在电子商务平台中,如果用户下单后一定时间内未支付,可以使用延迟队列在超时后自动取消订单

3. MQ产品对比

M的实现肯定不止RabbitMQ一种,在使用的时候可以根据自己的业务需求和使用场景来选择最适合自己的技术。

1. Kafka
Kafka一开始的目的就是用于日志收集和传输,追求高吞吐量,性能卓越,单机吞吐达到十万级,在日志领域比较成熟,功能较为简单,主要支持简单的 MQ 功能,如果有日志采集需求,肯定是首选kafka了。
2.RocketMQ
RocketMQ采用Java语言开发,由阿里巴巴开源,后捐赠给了Apache.它在设计时借鉴了Kafka,并做出了一些自己的改进,青出于蓝而胜于蓝,经过多年双十一的洗礼,在可用性、可靠性以及稳定性等方面都有出色的表现,适合对于可靠性比较高,且并发比较大的场景,比如互联网金融,但支持的客户端语言不多,且社区活跃度一般
3. RabbitMO
采用Erlang语言开发,MQ功能比较完备,且几乎支持所有主流语言,开源提供的界面也非常友好,性能较好,吞吐量能达到万级,社区活跃度也比较高,比较适合中小型公司,数据量没那么大,且并发没那么高的场景.

其实Rabbit的性能来说并算不上是顶尖的,但是其几乎支持所有语言,并且他有着很完善的社区,作为开发者在使用的过程中可以通过社区交流来解决自己使用技术的时候遇到的困难,这一点也是十分关键的。此外RabbitMQ的管理界面也是十分友好的.

4. RabbitMQ介绍

RabbitMQ 官⽹: RabbitMQ: One broker to queue them all | RabbitMQicon-default.png?t=N7T8https://www.rabbitmq.com/RabbitMQ是采用Erlang语言实现 AMQP(Advanced Message QueuingProtocol,高级消息队列协议)的消息中间件,它最初起源于金融系统领域,为了在分布式系统中存储和转发消息而设计的.

4.1 RabbitMQ安装(Ubuntu系统)

首先要在我们的服务器上安装erlang,毕竟Rabbit是使用Erlang来写的嘛,就像我们使用Java程序需要安装JDK是一样的道理。

#更新软件包
sudo apt-get update
#安装erlang
sudo apt-get install erlang

 使用 erl 命令查看erlang版本,出现上面的信息后就可以进行RabbitMQ的安装了。

# 安装RabbitMQ

#更新软件包
sudo apt-get update
#安装rabbitmq
sudo apt-get install rabbitmq-server
#确认安装结果
systemctl status rabbitmq-server

 完成安装后,使用查看RabbitMQ的安装状态:# systemctl status rabbitmq-server

# 安装RabbitMQ的管理界面:rabbitmq-plugins enable rabbitmq_management

4.2 启动服务并访问

# 启动服务

sudo service rabbitmq-server start

# 通过IP:port访问界面

http://yourIP:15672/  为默认端⼝号, 云服务器需要开启端口
这里默认的用户名和密码都是guest,
rabbitmq从3.3.0开始禁止使用guest/guest权限通过除 localhost 外的访问,那么就添加管理员用户吧。

4.3 添加管理员用户

操作RabbitMQ可以通过代码 或者界面 或者通过命令操作[rabbitmqctl] , 这里和我们熟悉的MySQL因为是挺像的。

# 添加用户admin 密码 password

# rabbitmqctl add_user ${账号} ${密码}
rabbitmqctl add_user admin admin

# 给用户添加权限

# rabbitmqctl set_user_tags ${ 账号 } ${ ⻆⾊名称 }
rabbitmqctl set_user_tags admin administrator

以下角色可选
RabbitMQ用户角色分为Administrator、Monitoring、Policymaker、Management、Impersonator、None共六种角色
1.Administrator 超级管理员,可登陆管理控制台(启用management plugin的情况下),可查看所有的信息,并且可以对用户,策略(policy)进行操作
2.Monitoring监控者,可登陆管理控制台(启用management plugin的情况下),同时可以查看rabbitmg节点的相关信息(进程数,内存使用情况,磁盘使用情况等)。
3.Policymaker 策略制定者,可登陆管理控制台(启用management plugin的情况下),同时可以对policy进行管理。但无法查看节点的相关信息.
4.Management 普通管理者,仅可登陆管理控制台(启用management plugin的情况下),无法看到节点信息,也无法对策略进行管理.
5.lmpersonator模拟者,无法登录管理控制台。
6.None 其他用户,无法登陆管理控制台,通常就是普通的生产者和消费者

 # 访问


http://www.ppmy.cn/news/1522559.html

相关文章

揭秘 AMD GPU 上 PyTorch Profiler 的性能洞察

Unveiling performance insights with PyTorch Profiler on an AMD GPU — ROCm Blogs 2024年5月29日,作者:Phillip Dang。 在机器学习领域,优化性能通常和改进模型架构一样重要。在本文中,我们将深入探讨 PyTorch Profiler&#…

基于深度学习的结构优化与生成

基于深度学习的结构优化与生成技术应用于多种领域,例如建筑设计、机械工程、材料科学等。该技术通过使用深度学习模型分析和优化结构形状、材料分布、拓扑结构等因素,旨在提高结构性能、减少材料浪费、降低成本、并加快设计流程。 1. 结构优化与生成的核…

从零开始写论文:如何借助ChatGPT生成完美摘要?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 在写论文的过程中,摘要是一个非常重要的部分,它能够帮助读者快速理解论文的核心内容,决定是否进一步阅读全文。但是许多学生在写摘要的时候常常感到困惑,不知…

怎么仿同款小程序的开发制作方法介绍

很多老板想要仿小程序系统,就是想要做个和别人界面功能类似的同款小程序系统,咨询瀚林问该怎么开发制作?本次瀚林就为大家介绍一下仿制同款小程序系统的方法。 1、确认功能需求 想要模仿同款小程序系统,那么首先需要找到自己想要…

24/9/3算法笔记 kaggle泰坦尼克

题目: 这次我用两种算法做了这道题 逻辑回归二分类算法 import pandas as pd from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklearn.metr…

CentOS 常用指令及作用解析

CentOS 常用指令及作用解析 在使用CentOS操作系统时,了解并熟练掌握常用的Linux指令是非常重要的。这些指令可以帮助你进行文件管理、系统管理、网络管理等操作。本篇文章将介绍一些CentOS下常用的指令及其主要作用。 目录 文件和目录操作指令文件内容操作指令系…

5千多道安全生产证考试题库ACCESS\EXCEL数据库

安全生产是保护劳动者的安全、健康和国家财产,促进社会生产力发展的基本保证,也是保证社会主义经济发展,进一步实行改革开放的基本条件。因此,做好安全生产工作具有重要的意义。今天的数据即是安全生产资格证、许可证考试题库。 大…

Unity --- 各种关节(Joints)来模拟物体之间的连接

目录 一:2D关节 一:1 固定关节 (Fixed Joint 2D) 功能: 适用场景: 1. 平台游戏中的固定平台: 2. 拼图游戏中的固定部件: 3. 建筑游戏中的固定结构: 一:2 铰链关节 (Hinge Joint 2D) 功能: 适用场景: 一:3 弹簧关节 (Spring Joint 2D) 功能: 适用场景: 1. …

【系统架构设计师】命令行风格

命令行风格(Command Line Interface, CLI)是一种用户与计算机程序交互的方式,它主要通过文本命令来执行程序的功能。在这种风格中,用户通过键盘输入命令,程序则通过命令行界面(通常是终端或控制台窗口)显示输出和反馈信息。命令行风格因其高效、灵活和强大的功能而广泛应…

Spring2~~~

注解配置Bean Spring的 IOC 容器检查到注解就会生成对象&#xff0c;但这个注解的具体含义不会识别 配置自动扫描的包 <!--配置容器要扫描的包1. component-scan 要对指定包下的类进行扫描, 并创建对象到容器2. base-package 指定要扫描的包3. 含义是当spring容器创建/初始…

在 Go 语言中使用模块

模块很重要,因为它们允许将相关的代码文件组织到同一个包中,并以一种提高简单性和可重复性的方式组织代码。 1. 开始使用模块 从代码的角度看,模块是 Go 包和文件以及名为 go.mod 的文件的集合。在接下来的步骤中,将学习如何创建模块,然后使用它。 2. 第一步:创建项目目…

MATLAB绘图基础5:MATLAB数据导入

参考书&#xff1a;《 M A T L A B {\rm MATLAB} MATLAB与学术图表绘制》(关东升)。 5.MATLAB数据导入 5.1 从CSV文件读取数据 C S V {\rm CSV} CSV文件是一种纯文本文件&#xff0c;文件中的数据以逗号为分隔符进行字段分隔&#xff0c;每一行数据代表一条记录&#xff0c;每…

力扣416-分割等和子集(Java详细题解)

题目链接&#xff1a;416. 分割等和子集 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 最近刚学完01背包&#xff0c;所以现在的题解都是以01背包问题为基础再来写的。 如果大家不懂01背包的话…

人生苦短我用Python Excel文件基本操作

人生苦短我用Python Excel文件基本操作 前言文件基本操作的模块和类pathlib.Path 类os.stat_result 类time.struct_time 命名元组time 模块shutil 模块 示例查看属性拷贝文件重命名文件查找文件批量操作 测试 前言 本文主要介绍通过Python中的pathlib模块&#xff0c;完成Exce…

【Android面试八股文】你能说说FragmentPagerAdapter 和 FragmentStatePagerAdapter的区别吗?

文章目录 一、FragmentPagerAdapter1.1 工作方式1.2 生命周期1.3 优缺点1.4 适用场景1.5 示例二、FragmentStatePagerAdapter2.1 工作方式2.2 生命周期2.3 优缺点2.4 适用场景2.4 示例三、FragmentPagerAdapter和FragmentStatePagerAdapter关于instantiateItem()方法和destroyI…

【Java中的位运算和逻辑运算详解及其区别】

Java中的位运算和逻辑运算详解及其区别 在 Java 编程中&#xff0c;位运算和逻辑运算是常见的两种操作类型。位运算用于操作整数的二进制位&#xff0c;而逻辑运算则是处理布尔值 (boolean) 的运算。本文将详细讲解这两种运算及其主要区别&#xff0c;并给出相应示例。 应用场…

Docker入门学习-01

Docker 官方文档 1. Docker 基础知识 1.1 什么是 Docker&#xff1f; Docker 是一个开源的平台&#xff0c;用于开发、交付和运行应用程序。它使用容器技术&#xff0c;将应用程序及其依赖打包在一个轻量级的可移植容器中。 1.2 Docker 的主要组件 镜像&#xff08;Image&a…

Django form.save 方法的详细分析

在 Django 中&#xff0c;form.save() 方法是用于将表单中的数据保存到数据库的核心方法。它的功能和实现可以分为几个重要的部分&#xff0c;下面就是我对 form.save() 方法的详细分析&#xff1a; 1、问题背景 在 Django 中&#xff0c;我们经常会使用 Form 来处理用户提交的…

2024 年高教社杯全国大学生数学建模竞赛 C 题 农作物的种植策略(详细思路+matlab代码+python代码+论文范例)

持续更新中,2024年数学建模比赛思路代码论文都会发布到专栏内,只需订阅一次! 完整论文+代码+数据结果链接在文末! 一、第一问 问题描述:假定各种农作物未来的预期销售量、种植成本、亩产量和销售价格相对于 2023 年保持稳定,每季种植的农作物在当季销售。如果某种作物每…

mysql基础知识-锁机制

文章目录 锁类型1. 共享锁&#xff08;Shared Locks, S锁&#xff09;2. 排他锁&#xff08;Exclusive Locks, X锁&#xff09;3. 意向锁&#xff08;Intention Locks&#xff09;4. 记录锁&#xff08;Record Locks&#xff09;5. 间隙锁&#xff08;Gap Locks&#xff09;6. …