RabbitMQ应用场景及特性

news2024/10/1 23:31:30

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.coloradmin.cn/o/1979444.html

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

相关文章

C#数据类型 全局变量 类型转换方法(汇总)

1、C#和S7-1200PLC S7.NET通信 C#和S7-1200PLC S7.NET通信-CSDN博客文章浏览阅读98次。一步步建立一个C#项目(连续读取S7-1200PLC数据)_s7协议批量读取-CSDN博客这篇博客作为C#的基础系列,和大家分享如何一步步建立一个C#项目完成对S7-1200PLC数据的连续读取。首先…

【AI绘画】FLUX:这款新的人工智能图像生成器非常善于创造人手

FLUX.1 是 Stable Diffusion 的公开重量级继承者,可将文本转化为图像。 FLUX.1 dev 生成图像:“A beautiful queen of the universe holding up her hands, face in the background.”。 就在7月下旬,人工智能初创公司黑森林实验室&#xff…

从零入门CV图像竞赛(2024全球Deepfake攻防挑战赛)

从零入门CV图像竞赛(2024全球Deepfake攻防挑战赛) Deepfake是什么? Deepfake是一种利用深度学习技术,特别是生成对抗网络(GANs)来实现视频、音频等多媒体内容的伪造技术。这项技术可以实现对视频中人物的…

【2】Swift Dynamic Island开发

文章目录 先新建一个实时活动组件熟悉下实时活动的代码UI代码解析 灵动岛(Dynamic Island)和实时活动(Live Activities)是 iPhone 为了便于用户在退出APP时,仍然能随时关注进行中的活动、高频操作的组件。其中: 灵动岛…

快速体验LLaMA-Factory 私有化部署和高效微调Llama3模型(曙光超算互联网平台异构加速卡DCU)

序言 本文以 LLaMA-Factory 为例,在超算互联网平台SCNet上使用异构加速卡AI 显存64GB PCIE,私有化部署Llama3模型,并对 Llama3-8B-Instruct 模型进行 LoRA 微调、推理和合并。 快速体验基础版本,请参考另一篇博客:快…

栈和队列的区别

简介 栈和队列从定义上来讲,只有一个不同,就是栈是先进后出的,而队列是先进先出的,两者不的不同如下所图所示: 栈和队列的实现 从实现上来说,栈和队列都可以用数组或者链表实现,不过从实现难度和时空复杂…

WEB前端16-Vuex状态管理模式

Vue2-Vuex基础 1.Vuex基本概念 在复杂的前端应用程序中,状态管理变得至关重要。Vuex 是 Vue.js 官方提供的状态管理模式和库,它能帮助我们更好地管理应用程序的状态并实现组件间的通信。本文将介绍 Vuex 的基本概念、核心概念和实际应用。 什么是 Vue…

Vue3炫酷的界面

Vanta.js - Animated 3D Backgrounds For Your Website3D & WebGL Background Animations For Your Websitehttps://www.vantajs.com/?effectbirds需要的安装包 npm install three npm install three0.13.4.0npm install vue3.2.37#Vanta JS 依赖 npm install vanta np…

移情别恋c++ ദ്ദി˶ー̀֊ー́ ) ——1.c++入门(2)

1. 函数重载 C⽀持在同⼀作⽤域中出现同名函数&#xff0c;但是要求这些同名函数的形参不同&#xff0c;可以是参数个数不同或者 类型不同。这样C函数调⽤就表现出了多态⾏为&#xff0c;使⽤更灵活。C语⾔是不⽀持同⼀作⽤域中出现同 名函数的。 #include<iostream> u…

传知代码-半监督学习与数据增强(论文复现)

代码以及视频讲解 本文所涉及所有资源均在传知代码平台可获取 概述 本文复现论文 FixMatch: Simplifying Semi-Supervised Learning with Consistency and Confidence[1] 提出的半监督学习方法。 半监督学习&#xff08;Semi-supervised Learning&#xff09;是一种机器学习…

使用Python库开发Markdown编辑器并将内容导出为图片

简介 在本文中&#xff0c;我们将探索如何使用Python的wxPython库开发一个Markdown编辑器应用程序。这个应用程序不仅能浏览和编辑Markdown文件&#xff0c;还可以将编辑的内容导出为PNG图片。 C:\pythoncode\new\markdowneditor.py 完整代码 import wx import markdown2 im…

前端实现下载word(多个word下载)-- docxtemplater

文章目录 &#x1f50e;什么是docxtemplater&#xff1f;&#x1f47b;docxtemplater语法&#x1f47b;普通插值for循环选择图片&#xff08;&#x1f330;代码&#xff09; &#x1f47b;实现下载&#x1f47b;安装依赖&#x1f330;完整代码关键逻辑解释 &#x1f47b;实现多…

CSP-J 复赛 模拟题 解析版

根据解析写代码1&#xff1a; #include <bits/stdc.h> using namespace std; long long a[101010]; long long b[101010]; int main(){bool flag0;long long t;cin>>t;while(t--){long long n,k;cin>>n>>k;for(int i1;i<n;i){cin>>a[i]>…

kickstart自动安装脚本

1、准备阶段 #开启图形 init 5 ​ #安装带GUI的服务器包组 yum -y groupinstall "Server with GUI" ​ #在xshell做需要加X ssh -Xl root 172.25.254.128 ​ #开启图形 gedit ​ 2、kickstart [rootpxe ~]# cat /root/anaconda-ks.cfg #此文件是在系统安装好后…

大数据Flink(一百零九):阿里云Flink的基本名称概念

文章目录 阿里云Flink的基本名称概念 一、层次结构 二、​​​​​​​​​​​​​​概念说明 1、工作空间&#xff08;Workspace&#xff09; 2、项目空间&#xff08;Namespace&#xff09; 3、资源&#xff08;Resource&#xff09; 4、草稿&#xff08;Draft&#…

将本地微服务发布到docker镜像二:

上一篇文章我们介绍了如何将一个简单的springboot服务发布到docker镜像中&#xff0c;这一篇我们将介绍如何将一个复杂的微服务&#xff08;关联mysql、redis&#xff09;发布到docker镜像。 我们将使用以下两种不同的方式来实现此功能。 redis、mysql、springboot微服务分开…

linux的自动检测的脚本:用于检测应用程序状态的linux脚本

目录 一、要求 1、需求内容 2、分析 二、脚本介绍 1、脚本代码 2、脚本解释 &#xff08;1&#xff09;脚本结构 &#xff08;2&#xff09;应用程序和服务列表 &#xff08;3&#xff09;日志文件路径 &#xff08;4&#xff09;测试 URL 列表 &#xff08;5&#…

智能小程序 Ray 开发面板 SDK —— 无线开关一键执行模板教程(一)

1. 准备工作 前提条件 已阅读 Ray 新手村任务&#xff0c;了解 Ray 框架的基础知识已阅读 使用 Ray 开发万能面板&#xff0c;了解 Ray 面板开发的基础知识 构建内容 在此 Codelab 中&#xff0c;您将利用面板小程序开发构建出一个支持一键执行及自动化的无线开关面板&…

HCIP----BGP综合实验

一、实验拓扑 二、实验要求 三、实验思路 1.基于172.16.0.0/16根据实验拓扑图进行IP地址规划&#xff0c;规划过程如下&#xff1a; 2.根据上述的IP地址的规划进行配置&#xff0c;配置完后在AS2中配置OSPF使其内部实现全网通&#xff08;互相建邻的条件&#xff09;。 3.在A…

keil编程中#pragma NOAREGS的作用和优点

参考 功能 不直接操作内存地址 #pragma NOAREGS在Keil中的使用含义是禁用自动分配寄存器&#xff0c;开发人员指定控制的寄存器。‌例如中断的执行使用的寄存器需要人为的指定&#xff0c;避免分配同样的寄存器导致数据错误。对寄存器R0到R7不直接操作寄存器地址&#xff0c…