RabiitMQ消息队列系统

news2024/12/22 22:16:30

一、MQ

1、概念:

MQ 全称为 Message Queue (消息队列),是一种应用程序对应用程序的通信方法。MQ 允许应用程序将消息写入队列,其他应用程序从队列中读取并处理这些消息,不需要它们之间直接相互联系。消息队列可用于实现异步通信、解耦应用程序、提高系统性能,适用于处理一些不需要即时响应的任务。

● 产品:Kafka ;RabbitMQ ;RocketMQ

2、特性:

① 解耦性:通过消息传递来实现应用程序之间的通信,应用程序之间不需要直接相互联系;

② 冗余性:通过负载均衡和数据同步来存储请求信息,防止数据丢失;

③ 扩展性:适应不断增长的负载和需求,以应对更多的应用程序和用户;

④ 削峰填谷:在高负载时期,消息队列接收并存储大量的消息,使系统不会被突然的大量请求压垮,这些消息在队列中等待处理 ;在低负载时期,系统逐渐处理在高负载时期积累的消息。

⑤ 顺序保证:在消息队列中,消息的处理和传递遵循特定的顺序,确保消息按照它们被发送到队列的顺序进行处理;

3、模式:

(1) P2P 模式:

① 基本原理: P2P模式包含三个角色:消息队列 (Queue)、发送者 (Sender)、接收者 (Receiver)

在点对点模式中,消息被发送者发送到队列,然后由一个特定的接收者(消费者)从队列中接收和处理消息。

② 特点:

P2P 模式每条消息只能被一个接收者消费(一对一);

接收者在成功接收消息之后,需向队列应答成功;

P2P 模式每个消息都会被成功处理。

(2) Pub/Sub 模式:

① 基本原理:Pub/Sub 模式包含三个角色:主题 (Topic)、发布者 (Publisher)、订阅者 (Subscriber)

在 Pub/Sub 模式中,消息被发送到一个主题(topic),多个消费者可以订阅这个主题以接收消息。

② 特点:

Pub/Sub 模式每条消息可以被多个订阅者同时接收(一对多);

Pub/Sub 模式适用于需要将消息广播给多个接收者的场景。

二、RabbitMQ 介绍

1、概念:

RabbitMQ是一个在 AMQP (Advanced Message Queuing Protocol) 基础上实现的可复用的企业消息系统,支持多种协议和客户端,支持高并发和可扩展。

● AMQP 协议:是一个提供统一消息服务的应用层标准高级消息队列协议,基于此协议的客户端与消息中间件可传递消息,不受客户端/中间件不同产品,不同的开发语言等条件的限制。

2、RabbitMQ 架构:

消息生产者、消息队列内部组件、队列程序、消息消费者

3、RabbitMQ 通信过程:

① Message:消息,由消息头和消息体组成。消息头是消息的元数据,通常包含与消息有关的一些属性和标识 ;消息体是消息中包含的实际数据,这是消息的主要内容。

② Publisher:消息生产者,向交换机发送消息的客户端程序。

③ Exchange:交换机 (消息队列的组件),用于接收生产者发送的消息,再将这些消息路由发送给服务器中的队列。

④ Queue:消息队列,是消息的容器,用来保存消息,将消息发送给消费者。

⑤ Bingding:绑定,将交换器和消息队列连接起来的路由规则,用于消息队列和交换器之间的关联。

⑥ Virtual Host:虚拟主机,是一种逻辑隔离机制,它允许将消息队列和相关资源隔离到不同的逻辑单元中。每个虚拟主机都是一个相互独立的消息队列环境,拥有自己的队列、交换机、绑定、用户权限等。

⑦ Broker:rabbitmq 的服务器实体。

⑧ Connection:连接,rabbitmq 与应用程序建立的TCP的连接。

⑨ Channel:信道,是TCP里的虚拟连接,一条TCP连接,可以包含很多条的Channel。

⑩ Consumer:从消息队列中获取消息的应用程序。

4、消息:

(1) 消息的传输和分发:

rabbitmq 采用信道的方式传输消息 ;消费者通过订阅队列来接收消息,若多个消费者订阅同一个队列,rabbitmq 则使用轮询(round-robin)来决定哪个消费者将接收到队列中的下一条消息。

(2) 消息路由规则:

rabbitmq 使用交换机(Exchange)和绑定(Binding)来进行消息路由。消息的路由过程包括以下步骤:

① 生产者发布消息: 消息首先由生产者发布到一个特定的交换机,并且指定一个消息的路由键(Routing Key);

② 交换机根据绑定进行路由:绑定是交换机和队列之间的规则, 交换机会根据消息的路由键以及与它绑定的队列来决定将消息路由到哪些队列;

③ 消息发送到队列: 一旦消息被交换机路由到一个或多个队列,它就会被存储在这些队列中,等待消费者来处理。

(3) 常见的交换机类型和它们的路由规则:

① 直连交换机(Direct Exchange): 这种交换机使用精确的路由键匹配,只将消息发送到与消息的路由键完全匹配的队列。

② 主题交换机(Topic Exchange): 主题交换机使用通配符形式的路由键匹配,允许使用通配符符号(*和#)来匹配多个路由键。

③ 扇出交换机(Fanout Exchange): 扇出交换机将消息广播到与它绑定的所有队列,忽略路由键。

(4) 如何保证消息正确地发送至 rabbitmq:

将信道设置成confirm模式(发送方确认模式),发送方在信道上发布的消息都会被分配一个唯一的消息 ID(delivery tag)。一旦消息成功投递到目标队列或者消息被写入磁盘(持久化的消息),信道会向发送方发送一个包含消息ID确认消息。

如果 rabbitmq 发生内部错误或其他原因导致消息丢失,它会发送一条 "nack"(not acknowledged,未确认)消息,以通知发送方发生了问题。

(5) 如何确认接收方消费了消息:

rabbitmq 可以确保消息在成功被消费者接收和处理后才会被标记为已接收,并从队列中删除。

(6) 如何避免消息重复传递或重复消费:

● 内部消息标识符(inner-msg-id):每个消息生产者发送的消息都附带一个内部消息标识符,用于在消息传递过程中唯一标识每条消息,消息中间件可以使用这个标识符来确保消息不会被重复传递。

● 业务标识符(bizId):在消费者端,每个消息体都必须包含一个业务标识符(bizId),消息消费者可以使用业务标识符来检测并拒绝重复消息。

(7) 如何确保消息不丢失:

将 rabbitmq 消息设置为持久化,使 rabbitmq 服务器重启时消息不会丢失。

● 把队列的 durable 属性设置为true,表示设置的是持久队列;

● 在消息发布前,把消息的 “投递模式” 选项设置为2(持久),将消息标记成持久化。

三、RabbitMQ 单机部署:

1、环境:

设置主机名和域名解析

192.168.198.131(rabbitmq1)

192.168.198.132(rabbitmq2)

192.168.198.133(rabbitmq3)

2、部署 Erlang:

Rabbitmq 是基于 Erlang 构建的,部署 Rabbitmq 系统环境需要提供 Erlang 环境

Erlang下载地址:rabbitmq/erlang - Packages · packagecloud

wget --content-disposition "https://packagecloud.io/rabbitmq/erlang/packages/el/7/erlang-23.3.4.7-1.el7.x86_64.rpm/download.rpm?distro_version_id=140"

rpm -Uvh erlang-23.3.4.7-1.el7.x86_64.rpm

3、部署 rabbitmq:

RabiitMQ 安装需要先安装 socat 插件:yum install -y socat

rabbitmq 下载地址:rabbitmq/rabbitmq-server - Packages · packagecloud

wget --content-disposition "https://packagecloud.io/rabbitmq/rabbitmq-server/packages/el/7/rabbitmq-server-3.10.0-1.el7.noarch.rpm/download.rpm?distro_version_id=140"

rpm -Uvh rabbitmq-server-3.10.0-1.el7.noarch.rpm

4、rabbitmq web 界面:

rabbitmq-plugins enable rabbitmq_management

端口为 15672

① 添加用户:rabbitmqctl add_user 用户名 密码

② 分配角色:rabbitmqctl set_user_tags 用户名 角色

● 超级管理员 administrator:可登陆管理控制台,可查看所有的信息,并且可以对用户,策略进行操作。

● 监控者 monitoring:可登陆管理控制台,同时可以查看rabbitmq节点的相关信息 (进程数,内存使用情况,磁盘使用情况等)

● 策略制定者 policymaker:可登陆管理控制台, 同时可以对policy进行管理。但无法查看节点的相关信息。

● 普通管理者 management:仅可登陆管理控制台,无法看到节点信息,也无法对策略进行管理。无法登陆管理控制台,通常就是普通的生产者和消费者。

③ 授予权限:rabbitmqctl set_permissions -p / 用户名 ".*" ".*" ".*" (后面三个”*”代表用户拥有配置、写、读全部权限)

四、RabbitMQ 集群部署

1、简介:

rabbitmq 集群部署是将多个 rabbitmq 节点组合在一起,通过增加更多的节点来提高系统的可用性和可靠性,形成一个能够提供更强大功能的整体。

2、原理:

(1) cookie:

● rabbitmq 底层是通过 Erlang 架构来实现的,所以 rabbitmqctl 会启动 Erlang 节点,并基于 Erlang节点来 rabbitmq 节点。cookie 是一个密钥令牌,用于 rabbitmq 集群中的节点认证。Erlang的集群中各节点通过这个 cookie 来实现相互认证,从而保证消息的可靠传输。

● 在部署 rabbitmq 集群时,需要保证各节点的 cookie 文件使用的是同一个值,所以部署 rabbitmq 分布式集群时要先安装 Erlang,并把其中一个服务的cookie 复制到另外的节点 ;而且文件的权限是400,以保证节点之间能够正确通信。

(2) 内存节点和磁盘节点:

① 内存节点:将数据存储在内存。内存节点主要负责提供高性能的消息传递,加快消息的传递速度;

② 磁盘节点:将数据存储在磁盘上。磁盘节点主要负责确保数据的可靠性,即使在节点故障后也能恢复数据。

(3) 普通模式和镜像模式:

① 普通模式:对于两个节点 rabbit01、rabbit02 来说,消息实体只存在于其中一个节点 (例如 rabbit01),当 consumer 从 rabbit02 节点消费时,RabbitMQ 会临时在 rabbit01、rabbit02 间进行消息传输,把1中的消息实体取出并经过2发送给 consumer。

② 镜像模式:消息实体会主动在镜像节点之间实现同步,而不是像普通模式那样,在 consumer 消费数据时临时读取,但集群内部的同步通讯会占用大量的网络带宽。

3、集群配置:

(1) 设置 erlang 运行节点:

将 rabbitmq1 的 .erlang.cookie 文件拷贝到 2、3,使三台 rabbitmq 的 cookie 内容保持一致,文件权限为400 (只读)。

scp -r /var/lib/rabbitmq/.erlang.cookie rabbitmq2:/var/lib/rabbitmq/.erlang.cookie

scp -r /var/lib/rabbitmq/.erlang.cookie rabbitmq3:/var/lib/rabbitmq/.erlang.cookie

重启服务:systemctl restart rabbitmq-server

(2) rabbitmq2、3关闭节点:

关闭 rabbitmq 运行节点:rabbitmqctl stop

设置为独立节点:rabbitmq-server -detached

查看节点状态:rabbitmqctl cluster_status

(3) rabbitmq2、3添加集群:

停止应用:rabbitmqctl stop_app

添加集群:rabbitmqctl join_cluster rabbit@rabbitmq1

开启应用:rabbitmqctl start_app

查看集群状态:rabbitmqctl cluster_status

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

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

相关文章

信息系统项目管理师改机考的真实感受

继上篇文章讨论的架构师考试通过后,去年也通过了系统分析师,今年刚刚考完信息系统项目管理师,为什么要再写一篇”真实感受“?因为这次改革为机考,时间上也有所调整,考试感受完全不同。 这里不谈考试技巧&am…

云原生之nacos架构一览解读

目录 一、什么是服务? 二、什么是服务注册中心? 三、什么是服务元数据? 四、什么是服务提供方? 五、什么是服务消费方? 一、什么是服务? 在云原生架构中,"服务"是指可独立部署和…

【vue2高德地图api】05-关于公交线路的案例实战

系列文章目录 文章目录 系列文章目录前言一、创建页面,以及路由1.创建layout.vue2.再创建该编写的主页面route.vue 二、使用步骤1.引入高德地图2.初始化map3. 初始化线路查询4.运行代码,查看结果 三、渲染页面3.1 列表变量赋值,以及再次封装实…

工程(十四)——ubuntu20.04 PL-VINS

博主创建了一个科研互助群Q:772356582,欢迎大家加入讨论。这是一个科研互助群,主要围绕机器人,无人驾驶,无人机方面的感知定位,决策规划,以及论文发表经验,以方便大家很好很快的科研…

PTA 编程题(C语言)-- 连续因子

题目标题: 连续因子 题目作者 陈越 浙江大学 一个正整数 N 的因子中可能存在若干连续的数字。例如 630 可以分解为 3567,其中 5、6、7 就是 3 个连续的数字。给定任一正整数 N,要求编写程序求出最长连续因子的个数&#xff0c…

虚拟数字人引领企业创新浪潮

在人工智能和计算机图形学快速发展的今天,虚拟数字人正逐渐成为企业形象展示的新趋势。作为一种融合了多种技术的数字化形象,虚拟数字人具有逼真的外观、情感表达和思维逻辑,能够与人类进行自然、流畅的互动,为企业提供全天候、个…

【uniapp+vue3/vue2】ksp-cropper高性能图片裁剪工具,详解

效果图: 1、ksp-cropper是hbuilder插件市场中的一款插件,兼容vue2和vue3 ksp-cropper插件安装地址,直接点击跳转 2、插件用法相对简单 (1)只要url有值就会显示插件,为空就会隐藏插件 (2&#…

FineReport----报表模板入门

FineReport----报表模板入门教程1 FineReport就一款类Excel操作界面的报表工具,通过拖拖拽拽简单实现报表制作,实现数据展示、数据查询、数据录入功能,并且支持图形多样化展示。 一、入门小例子 1. 打开设计器 启动FineReport设计器&…

Window 11中安装Rust编译环境和集成开发环境

https://blog.csdn.net/weixin_43882409/article/details/87616268是我参考的一篇文章。 下载 先到https://www.rust-lang.org/learn/get-started,下载64-Bit(64位)的rustup-init.exe文件。 使用其他方式进行安装的网址https://forge.rust…

视频特效编辑软件 After Effects 2022 mac中文版介绍 (ae 2022)

After Effects 2022 mac是一款视频特效编辑软件,被称为AE,拥有强大的特效工具,旋转,用于2D和3D合成、动画制作和视觉特效等,效果创建电影级影片字幕、片头和过渡,是一款可以帮助您高效且精确地创建无数种引…

初识面向对象(类和对象)

目录 1. 面向对象的初步认知 2.面向对象与面向过程 3.类定义和使用 4.类的定义格式 练习 5.类的实例化 什么是实例化 6.this引用 为什么要有this引用 什么是this引用 this引用的特性 7.对象的初始化 默认初始化 就地初始化 使用构造方法初始化 1. 面向对象的初步…

大数据毕业设计选题推荐-营业厅营业效能监控平台-Hadoop-Spark-Hive

✨作者主页:IT毕设梦工厂✨ 个人简介:曾从事计算机专业培训教学,擅长Java、Python、微信小程序、Golang、安卓Android等项目实战。接项目定制开发、代码讲解、答辩教学、文档编写、降重等。 ☑文末获取源码☑ 精彩专栏推荐⬇⬇⬇ Java项目 Py…

Logstash与FileBeat详解以及ELK整合详解

背景 日志管理的挑战: 关注点很多,任何一个点都有可能引起问题日志分散在很多机器,出了问题时,才发现日志被删了很多运维人员是消防员,哪里有问题去哪里 集中化日志管理思路: 日志收集》格式化分析》检索…

一种以RGB颜色登录的密码实现

当用户点击了某些密码之后,就可以登录成功,主要用于安全码,辅助安全手段。 颜色密码虽然不方便用键盘输入,只能用鼠标点击,但是容易记忆,也不容易被黑客攻陷。

PC9502双节锂电池充电管理芯片高精度外围元件少SOP8封装

■ 产品概述 PC9502 系列是一款双节锂电池充电管理芯片。 该芯片 包含了充电状态检测、充电过程、温度检测等,内部还集成 一个高精度的基准电压模块,此芯片采用 SOP-8 封装。 PC9502 充电包含三种模式:预充电,恒流充电&#x…

【REST API】什么是REST API?

参考: 什么是 REST API 一文读懂 (RESTful API)_哔哩哔哩_bilibili -------------------------------------------------------------------------------------------------------------------------------- REST API,又被称作RESTful API&#xff0c…

国内私募机构出海或成趋势?| A+CLUB深圳沙龙圆桌论坛

上篇国君国际、华锐技术、亚马逊云科技和彭博的四位专家对私募出海涉及到的业务和技术领域做了专业分享,本篇将为大家带来干货满满的圆桌论坛内容。此次圆桌由华锐技术机构业务总监-葛云娟主持,国君国际跨境业务销售主管-毛哲、清华大学教授-林健武、衍盛…

微服务之Nacos配置管理

文章目录 一、统一配置管理Nacos操作二、统一配置管理java操作1.引入依赖2.创建配置文件3.测试4.总结 三、Nacos配置自动更新1.添加注解RefreshScope2.使用ConfigurationProperties注解3.总结 四、Nacos多环境配置共享1.配置文件2.多种配置的优先级3.总结 一、统一配置管理Naco…

Spire.Office for .NET 8.10.2 同步更新-Crk

Spire.Office for .NET是 E-iceblue 提供的企业级 Office .NET API 的组合。它包括Spire.Doc、Spire.XLS、Spire.Spreadsheet、Spire.Presentation、Spire.PDF、Spire.DataExport、Spire.OfficeViewer、Spire.PDFViewer、Spire.DocViewer、Spire.Barcode和Spire.Email。Spire.O…

二.831(KMP)字符串详解

ne[3]枚举2次 ne[4],枚举3次 ne[5],枚举4次]b在后面了,就一个b就不可能在前面了]b舍弃 ne[6],枚举i-1次]一眼看最长相等前后缀,就是aab,aab ne[7],aaba,aaba ne[8],枚举i-1次]aabaa,aabaa 同理 怎么快速看呢!我想把b给夹起来]把中间夹的数越多就多 其实 加的有规律,最…