兔子队列?RabbitMQ详解(1)

引入

首先先介绍一下什么是 RabbitMQ 的意思:Rabbit 是一个公司的名称,MQ 是 message queue (消息队列)的缩写,而 RabbitMQ 是 Rabbit 企业下的一个消息队列产品,是一个采用Erlang语言实现AMQP(Advanced Message Queuing Protocol,高级消息队列协议)的消息中间件,它最初起源于金融系统领域,为了在分布式系统中存储和转发消息而设计的.,是当前主流的消息中间件之一。在互联网架构中,会经常使用 MQ 来作为消息消息通信服务。

AMQP,是高级消息队列协议(Advanced Message Queuing Protocol)的意思,是一个通用的应用层协议,提供统一的消息服务协议,为面向消息的中间件设计。基于此协议的客户端与消息中间件可以传递消息,并不受客户端或者中间件,开发语言等条件的限制

Message Queue

消息队列可以把它理解为数据结构中的“队列”,有先进先出的性质(FIFO),队列中存放的内容是消息(Message)。并且消息的的内容或格式也可以多种多样:JSON 数据,文本字符串等。

MQ 多用于分布式系统之间的通讯,而系统之间的调用常有两种方式:

  • 同步通讯:(下图右侧为“服务2”)直接调用对方的服务,数据从一端出发后立可以到达另一段
  • 异步通讯:数据从一段发出后,先进入一个容器(消息队列)进行临时存储,当达到某种条件的时候,这个容器再发送给另一端,而这个容器的具体实现就是 message queue(MQ)

 作用

从上图上可以看出,MQ 在整个系统调用过程中充当了一个类似于中介的作用,也就是接受和转发消息,常见解决的问题的场景有一下几种:

  • 异步解耦:有时候调用一些接口返回数据的时候,可能在查询数据库的时候话费了很长的时间才可以把数据返回,但是这样给用户的体验就很差,所以可以优化一下,就是不即使的返回结果,借助 MQ 把这些操作异步优化,比如用户注册后发送注册短信或者邮件通知,可以作为异步任务处理,从而不必等待这些操作完成后才告知用户注册成功
  • 流量削峰:如果某一时刻某个接口的 QPS 或者访问量激增的情况下,我们的服务器就可能会崩溃掉,但是我们如果因为这种并不是很常见的情况下投入成本去增加数量或者提升服务器处理能力的话是比较浪费资源的,因此我们可以使用 MQ 的关键组件来支撑突发访问量,可以通过其来控制流量,将请求排队,然后系统根据自己的处理能力逐步处理这些请求

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

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

相关文章

某智能家电龙头,社招 校招全面应用 AI 面试的创新实践

某智能家电龙头在竞争中凭借创新能力和高品质服务稳居市场前列,为更好地赋能业务,集团招聘总监着力构建数字化招聘流程,率先引入 AI 面试实现招聘智能化升级,减轻 HR 负担、提升效率,优化候选人体验,达成双…

STM32 实时时钟(RTC)详解

一、RTC 简介 RTC(Real Time Clock)即实时时钟,本质上是一个 32 位的秒级计数器: 最大计数值为 4294967295 秒,约合 136 年: 复制编辑 4294967295 / 60 / 60 / 24 / 365 ≈ 136 年 RTC 初始化时&#x…

《AI驱动的智能推荐系统:原理、应用与未来》

一、引言 在当今信息爆炸的时代,用户面临着海量的信息选择,从购物平台上的商品推荐到流媒体服务中的影视推荐,智能推荐系统已经成为我们日常生活中不可或缺的一部分。AI驱动的智能推荐系统通过分析用户的行为和偏好,为用户提供个性…

Django + Celery 打造企业级大模型异步任务管理平台 —— 从需求到完整实践(含全模板源码)

如需完整工程文件(含所有模板),可回复获取详细模板代码。 面向人群:自动化测试工程师、企业中后台开发人员、希望提升效率的 AI 业务从业者 核心收获:掌握 Django 三表关系设计、Celery 异步任务实践、基础 Web 交互与前后端分离思路,源码可直接落地,方便二次扩展 一、系…

创建对象

虽然Object构造函数或对象字面量可以方便地创建对象,但这些方式也有明显不足: 创建具有同样接口的多个对象需要重复编写很多代码 1.工厂模式 工厂模式是一种众所周知的设计模式,广泛应用于软件工程领域,用于抽象创建特定对象的过程 function createPerson(name,age){let…

深度理解指针(2)

🎁个人主页:工藤新一 🔍系列专栏:C面向对象(类和对象篇) 🌟心中的天空之城,终会照亮我前方的路 🎉欢迎大家点赞👍评论📝收藏⭐文章 深入理解指…

数据科学和机器学习的“看家兵器”——pandas模块 之一

目录 pandas 模块介绍 4.1 pandas 数据结构 一、课程目标 二、Series 对象介绍 三、DataFrame 对象介绍 四、Series 和 DataFrame 在具体应用中的注意事项 (一)Series 注意事项 (二)DataFrame 注意事项 五、实战案例 案例 1:学生成绩分析 案例 2:销售数据分析 案例 3:股…

STM32CubeMX HAL库 串口的使用

1.配置 2.开启中断后,生成代码 3.串口的接收 1).开启空闲中断接收 __HAL_UART_ENABLE_IT(huart, UART_IT_IDLE); // 关键步骤:启用空闲中断 2). 启动接收 调用 HAL_UARTEx_ReceiveToIdle_IT 启动异步接收,可以使用…

IIS服务器URL重写配置完整教程

1.下载URL Rewrite Module 2.1 https://www.iis.net/downloads/microsoft/url-rewrite https://download.microsoft.com/download/1/2/8/128E2E22-C1B9-44A4-BE2A-5859ED1D4592/rewrite_amd64_zh-CN.msi 2.安装

vite+vue建立前端工程

​ 参考 开始 | Vite 官方中文文档 VUE教程地址 https://cn.vuejs.org/tutorial/#step-1 第一个工程 https://blog.csdn.net/qq_35221977/article/details/137171497 脚本 chcp 65001 echo 建立vite工程 set PRO_NAMEmy-vue-appif not exist %PRO_NAME% (call npm i…

负进制转换

当一个数的基数是负数时,将这个数转换为负进制数时,大体思路和正数的情况一样,但是因为基数是负数,所以计算出来的余数就有可能是负数所以,需要在余数是负数时:将余数 基数的绝对值,商 1。 代…

K8S已经成为了Ai应用运行的平台工具

AI应用与K8s的深度融合:加速云原生时代的智能运维与业务创新 摘要: 随着人工智能(AI)技术的飞速发展,Kubernetes(K8s)作为容器编排领域的领军者,正逐步成为承载AI应用的核心基础设施…

NVMe简介1

它分为两部分,这里是第一部分。 NVM Express(NVMe)是一种高性能、可扩展的接口协议,用于通过PCI express(PCIe)总线,实现主机软件与NVM设备之间的通信。目前,由于NVMe SSD相比于SATA…

微服务商城(1)开篇、服务划分

参考:https://mp.weixin.qq.com/s?__bizMzg2ODU1MTI0OA&mid2247485597&idx1&sn7e85894b7847cc50df51d66092792453&scene21#wechat_redirect 为什么选择go-zero go-zero 为我们提供了许多高并发场景下的实用工具,比如为了降低接口耗时…

《隐私计算:数据安全与隐私保护的新希望》

一、引言 在数字化时代,数据已成为企业和组织的核心资产。然而,数据的收集、存储和使用过程中面临着诸多隐私和安全挑战。隐私计算作为一种新兴技术,旨在解决数据隐私保护和数据共享之间的矛盾。本文将深入探讨隐私计算的基本概念、技术原理、…

MySQL 学习(九)bin log 与 redo log 的区别有哪些,为什么快速恢复使用 redo log 而不用 bin log?

目录 一、bin log 与 redo log 的区别1)实现方式不同:2)日志内容不同:3)记录方式不同:4)使用场合不同: 二、为什么快速恢复使用 redo log 而不用 bin log? 面试题&#x…

用Array.from实现创建一个1-100的数组

一、代码实现 let arr Array.from({length: 100}, (_, i) > i 1); 二、代码分析 1、Array.from(arrayLike, mapFn) (1)arrayLike 类数组对象(如 { length: 100 })本身没有索引属性(如 0: undefined, 1: undefi…

javaScript简单版

简介 JavaScript(简称:JS)是一门跨平台、面向对象的脚本语言,是用来控制网页行为,实现页面的交互效果。 JavaScript和Java是完全不同的语言,不论是概念还是设计。但是基础语法类似。 组成: ECMAScript:规定了JS基础语法核心知…

Python刷题练习

文章目录 1.寻找相同字串2.密钥格式化3.五键键盘的输出4.单词重量5.输出指定字母在字符串的中的索引6.污染水域7.九宫格按键输入8.任务最优调度9.高效的任务规划 1.寻找相同字串 题目描述: 给你两个字符串t和p,要求从t中找到一个和p相同的连续子串,并输…

MATLAB实现振幅调制(AM调制信号)

AM调制是通信专业非常重要的一个知识点。今天我们使用MATLAB编程实现AM调制。 我们实现输入一个载波信号的频率与调制信号的频率后,再输入调幅度,得到已调信号的波形与包络信号的波形,再使用FFT算法分析出已调信号的频谱图。 源代码&#x…