RabbitMQ应用场景及特性

RabbitMQ是一款开源的消息队列中间件,拥有非常好用的管理控制面板,类似使用navicat一样,简便的操纵数据库。

应用场景

一、流量削峰

在一些并发量较高的场景下,比如秒杀活动,抢票等,同一时间访问量急剧增大,处理业务的服务器由于业务比较繁琐,比较脆弱,此时可以使用消息队列作为中转,大量请求先发送到消息队列,处理业务的服务器再根据自己的节奏,从消息队列中获取消息并处理。

二、解耦

如果服务器A直接与服务器B进行通信,当A这边想要修改代码,或者A服务挂了, 可能会导致服务器B需要修改代码。如果使用消息队列,服务器B只需要关注消息队列中的数据,不需要管服务器A中是怎么去写代码的。

三、异步

当我们想要将数据写入到数据库中,然后再同步到缓存中,此时我们发现,这是一条线性的方式,如果使用消息队列,将数据发送到消息队列,写入缓存的服务器和写入数据库的服务器去订阅消息队列,一旦有数据,就可以并行执行。

四、消息分发

当我们的系统想要再添加一个模块来获取之前的数据,就可以直接去订阅消息队列,后续消息就会被转发过来,然后就可以执行处理了。一旦下游想要上游的数据了,就添加一个订阅者即可。

工作流程

使用rabbitmq主要分为如下几部:

1)创建连接:Producer连接到RabbitMQ服务器,通过ConnectionFactory建立Connection,开启一个channel。

2)声明交换机队列以及绑定关系:Producer声明⼀个交换机(Exchange)和队列(Queue),并将队列绑定到交换机。

3)发布消息:Producer发送消息⾄RabbitMQ服务器。

4)消息存储及转发:RabbitMQ接收到消息,根据绑定关系进行消息分发,存储到相应队列中。

5)消费消息::消费者监听Queue,当消息到达时,从Queue中获取消息,处理后,向RabbitMQ发送消息确认。

6)消息删除:消息被确认后,RabbitMQ会把消息从Queue中删除。

特性

在RabbitMQ中主要有这么几个特性:

1)发布确认:用来保证可靠性的方式之一,运用在生产者一方。解决的是保证发布的消息能到达消息队列服务器以及消息能被交换机正确转发到队列。对应着两种模式:confirm和return模式。

2)持久化:用来保证可靠性的方式之一,运用在消息队列服务器。可以对交换机、队列、消息进行持久化,当服务器挂了,后续重启恢复消息。

3)消息确认:用来保证可靠性的方式之一,运用在消费者一方。可以通过配置的方式来选择,消息者在获取到消息时,是自动应答,还是手动应答,当接收到应答时,删除消息。

4)重试机制:在消息传递的过程中,可能会遇到网络故障等问题,rabbitmq还提供了重试机制,当消息发送失败,会进行重新发送。

5)TTL:过期时间,RabbitMQ提供了可以设置队列和消息的过期时间。设置队列的TTL,即队列中的所有消息的过期时间都为队列的TTL,或者可以单独设置消息的TTL。但需要注意设置消息TTL后,消息到了过期时间不一定会立马删除,需要等待队列前面的消息都过期了,才会删除。

6)死信队列:用来存放无法被消费的队列。当消息过期或者nack或者队列到达最大长度无法接收,此时消息会变成死信,然后根据配置,发送到死信交换机,再到死信队列中。

7)延迟队列:即等待一定时间后,消费者才可以消费这条消息。但RabbitMQ本身没有直接提供延迟队列的功能,但可以通过TTL+死信队列的方式进行实现或者添加一个RabbitMQ的官方延迟插件。

8)事务:将操作变成原子的,要么全部成功,要么相当于没执行。

9)负载均衡、限流:可以通过参数配置的方式来限定消费者所能保持最大未确认消息的数量。以此达到限流或者负载均衡的效果。

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】shell命令与Linux权限的概念

目录 一、shell命令二、Linux权限的概念2.1 Linux权限的概念2.1.1 用户2.1.2 指令2.1.2.1 su指令2.1.2.2 sudo指令 2.2 Linux权限管理2.2.1 文件访问者的分类(人)2.2.2 文件类型和访问权限(事物属性)2.2.2.1 文件类型2.2.2.2 基本…

[240804] OpenTofu 1.8.0 发布,带来更友好的编码体验 | 生成式 AI 滥用现象分析

目录 OpenTofu 1.8.0 发布,带来更友好的编码体验生成式 AI 滥用现象分析 OpenTofu 1.8.0 发布,带来更友好的编码体验 OpenTofu 1.8.0 现已发布,主要功能包括: 变量和局部值的早期求值: 现在可以在模块源、后端配置和状态加密等更…

使用 1panel面板 部署 springboot 和 vue

代码仓库:还没弄 目录 网站介绍安装步骤1. 准备云服务器2. 准备域名(可跳过)3. 安装1panel面板4. 服务器开放端口5. 进入1panel面板6. 安装并启动软件(服务器和面板开放端口)7. 打包并上传项目7.1 打包 Java项目&#…

网页保护用户 小tips

在使用创建web开发的过程中,直接使用用户名url,容易造成用户信息的被攻击,例如对方直接访问 ../../.../username 的网页,可以窃取用户信息,然而把usename变成一堆乱码就安全的多 效果: 代码:…

想做抖音短视频,视频素材去哪里找啊?

各位抖音上的短视频创作者们,是否曾幻想过自己的作品能够在全网爆火,却常因为缺少那些能够让视频更加生动的素材而感到困扰?不用担心,今天我要为大家介绍几个优秀的视频素材网站,让你的抖音之路顺风顺水! …

星环科技与宁夏银行“大数据联合实验室”揭牌,持续打造金融科技新范式

5月30-31日,2024向星力未来数据技术峰会期间,在峰会现场来宾共同见证下,星环科技与宁夏银行“大数据联合实验室”正式揭牌,宁夏银行股份有限公司首席信息官崔彦刚与星环科技副总裁邱磊共同为联合实验室揭牌。 星环科技与宁夏银行借…

【每日刷题】Day92

【每日刷题】Day92 🥕个人主页:开敲🍉 🔥所属专栏:每日刷题🍍 🌼文章目录🌼 1. 面试题 16.05. 阶乘尾数 - 力扣(LeetCode) 2. 取近似值_牛客题霸_牛客网 (n…

4. 最长公共前缀

4. 最长公共前缀 题目题目分析 题目 题目分析 首先要对字符串数组进行分析,字符串数组元素的最长公共前缀肯定不会超过最小元素长度,并如存在公共前缀则需遍历整个字符串元素,有点像二维数组,最后加上截取字符串加上判空操作就完…

测试——Selenium

内容大纲: 什么是自动化测试 什么是Selenium Selenium工作原理 Selenium环境搭建 Selenium API 目录 1. 什么是自动化测试 2. 什么是Selenium 3. Selenium工作原理 4. Selenium环境搭建(java) 5. Selenium API 5.1 定位元素 5.1.1 CSS选择器定位元素 5.1.2 XPath定位元…

Kubernets(k8s) 网络原理三:同主机内Pod相互访问

前两篇文章中我们介绍了pod怎么和宿主机通信以及pod怎么访问外网,这两种通信是理解pod间通信的基础。 关于pod间的相互访问,这里还需要细化一下。回想一下pod在k8s节点中的分布,两个pod可能分布在同一台宿主机上,也可能分布在不同…

ECMAScript 12 (ES12, ES2021) 新特性

还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;CSDN知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,ech…

PXE实验

实验前准备 关闭VMware的dhcp 点击 编辑 点击 虚拟网络编辑器 选择 NAT模式 将dhcp取消勾选 准备两台虚拟机 一台试验机,(网络环境正常并且有图形化的界面的rhel7) 一台测试机 init 5 --------------> 开启图形化界面 如…

element-plus框架+vue3+echart——后台页面

一、图表样式 图表组件:echarts https://echarts.apache.org/examples/zh/index.html element-plus框架: https://www.cwgj.xyz/zh-CN/ 1、折线图 栅格 一共24。 12代表占一半50%, 当页面缩小到一定程度 占整个屏幕的100%。 id"mo…

拉刀基础知识——拉刀的种类

如前面所说:近期要围绕拉削和拉刀这个话题,分享一些相关的内容,从最基础的知识开始,为此还专门买了本旧书——《拉刀设计》入门学习。废话不多说,直接开始。 拉刀最早由冲头演变而来,用于加工方孔&#xf…

C:关于static 和 extern 关键字的介绍-学习笔记

目录 1、作用域与生命周期 1.1 作用域 1.2 生命周期 1.3 变量的作用域和生命周期之间的关系 2、static 和 extern 2.1 static 修饰局部变量: 2.2 static 修饰全局变量(包含extern的作用): 2.3 static修饰函数&#xff1a…

由浅入深的了解进程(5)--环境变量

环境变量 前言环境变量1、更多的环境变量及添加和删除2、整体理解环境变量系统 3、内建命令 前言 在上一篇文章中简单的介绍了环境变量,但是没有讲述的比较全面了,所以现在再写一篇来介绍环境变量。 环境变量 在上一篇文章中,我们已经简单…

机械学习—零基础学习日志(高数18——无穷小与无穷大)

零基础为了学人工智能,真的开始复习高数 学习速度加快! 无穷小定义 这里可以记住,无穷小有一个特殊,那就是零。 零是最高阶的无穷小,且零是唯一一个常数无穷小。 张宇老师还是使用了超实数概念来讲解无穷小。其实是…

Mecanim Animation System

动画系统简介 Unity 有一个非常丰富而又复杂的动画系统,官方称其为Mecanim。该系统具有以下功能: 支持从外部导入动画剪辑,如:fbx、mb | ma(Autodesk maya 原件)、.max(3ds Max原件&#xff09…

Final Shell for Mac 虚拟机连接工具【简单易操作,轻松上手】【开发所需连接工具】

Mac分享吧 文章目录 效果一、下载软件二、安装软件三、运行测试安装完成!!! 效果 一、下载软件 下载软件 链接:http://www.macfxb.cn 二、安装软件 三、运行测试 安装完成!!!

Redis学习[6] ——Redis缓存设计

八、Redis缓存设计 8.1 为什么Redis用作缓存? 一般来说,数据库的数据都是落在磁盘上的,会导致读写速度很慢。如果用户的请求量非常大,数据库很容易崩溃。由于Redis的数据保存在内存中,读写速度很快,所以R…