消息队列 原理剖析

news2024/12/25 22:29:55

什么是消息队列?

​​消息队列是一种用来存储消息的队列。

消息队列能用来做什么?

1、消息或任务的延迟处理。

2、在复杂的业务场景下给系统减压。

3、提示用户体验感,增强用户体验。

4、敏感操作高安全环境处理。

场景举例1:用户注册

有一个用户注册场景,要求用户注册成功后会主动为用户推送  注册成功的欢迎短信  和  注册成功的欢迎邮件信息。

分析业务场景,用户注册成功后,针对用户来说,给的欢迎短信和欢迎邮件,是不用立即给用户推送的。能达到做延迟推送的处理

现架构师这样设计

用户注册接口由  用户中心  实现,

消息推送由 消息中心 实现

当用户注册成功后,由 用户中心 会在系统发起一个事件 - 用户注册成功事件。而在系统设计时,设计 消息中心 监听 用户中心 关于用户注册成功事件 的发生,当 用户注册成功事件 发生后,消息中心从事件对象中捕获用户对象,执行消息推送工作,即是短信和邮件信息推送。

因网站 qps 指标较高(单位时间内访问的流量很大),所以要在全局做性能优化处理。考虑到用户注册流程中短信推送和邮件信息推送比较耗时(第三方 接口使用),且满足延迟推送的业务场景。

之后改流程设计,将注册成功的  短信 和 邮箱 欢迎信息推送改为队列推送,减少接口即时处理的工作压力。达到性能提升的目的。

队列运行原理图

 

由上图可知,当程序执行到相关位置后 消息中心 向队列消息模型推送消息队列任务(发起者推送),等待 消费者 的执行处理

场景举例2 :银行资金流转

银行提现业务场景,我们常见微信提现,支付宝提现,银行卡互相转账。均会给你提示“2小时以内到账”,其中的核心技术即是采用了 消息队列 以及 分布式事务技术

为什么银行也需要采用消息队列来处理转账?

1、银行内部需要完全保证核心数据库的压力。使用消息队列后可以为数据库减压,避免即时转账因高迸发导致的数据库 死锁,内存溢出,连接数耗尽,iops性能指标耗尽 等

2、跨行转账 或是 系统设计为分布式系统时,分布式事务的使用有足够的时间进行事务补偿(转账失败时的资金回滚)

3、转账操作是复杂的,流程上  数据通信 加密/解密,安全效验,账户效验,账户加锁互相转账,日志流水,消息通知等等一系列的流程,平均耗时一次转账请求耗时2-5秒,如果不做队列消息,一旦遇到 cc攻击、ddos攻击等 会直接把服务器的稳定性压垮,从而导致 雪崩效应 其它服务 因转账业务占满了系统资源也无法正常提供访问。

消息队列的特性

1、消息队列的本质是线性执行,先进先出,后进后出。

2、消费的性能优化:在设计上我们也可以参考食堂打饭的流程,开启一个消息消费进程,就相当于开启了一个打饭窗口。一个打饭窗口的处理速度不行时,我们就多开几个消息消费进程,就相当于多开了几个打饭窗口,这样处理速度就起来了。

3、需要注意的点,消息队列在设计时应考虑到加入任务失败重试的机制(举例:因某刻数据库连接超时,导致无法进行的任务回滚,此时此任务应加入到重试队列,可配置反复3次均是失败时才删掉该队列的执行)。所以在制作消息队列对象时,要考虑任务执行时的 幂等性

总结

消息队列是一个很好的设计,为我们提供了更多的方案去处理不同的业务场景,追求用户体验。还有其它很多的场景案例不一一举例,掌握消息队列的核心就行。

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

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

相关文章

途乐证券|股票低开好还是高开好?股票低开高走再回落什么意思?

对于一向不涨的股票,出资者常常感到困惑和不安。那么一向不涨的股票要留吗?什么股票更简单上涨?为我们预备了相关内容,以供参阅。 一向不涨的股票要留吗? 一向不涨的股票要不要留没有一个绝对的答案,出资者…

Vue2.0-3.0 入门到实战 - 2 初始及插件安装

1 Vue 指令 v- 前缀的 特殊标签属性 1 v-html"表达式" 可以解析 文本html 类似 innerHtml 2 v-show 与 v-if v-show"表达式" true 表示 显示 false 标识隐藏 v-if"表达式" true 表示 显示 false 标识隐藏 区别 当v-show 的值…

青岛大学_王卓老师【数据结构与算法】Week04_05_双向链表的删除_学习笔记

本文是个人学习笔记,素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享,另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权,请留言作删文处理。 课程视频链接: 数据结构与算法基础–…

【CMake】构建类型详细解读

1. CMAKE_BUILD_TYPE官方资料 CMake可以配置构建类型,例如:Debug、Release等,控制生成构建系统使用的配置变量 是 CMAKE_BUILD_TYPE 。该变量默认为空,CMake识别的值为:Debug:用于在没有优化的情况下,使用带…

音频格式怎么转换成WAV?分享这三个WAV转换器!

随着数字时代的进步与发展,音频格式也变得越来越多样化。人们为了满足自己的需求,开始使用各种音频格式来存储和播放音乐。然而,不同的音频格式和不同的播放器之间常常存在兼容性问题,这就需要我们进行音频格式转换,以…

Spark SQL、DataFrame、DataSet是什么

在很多情况下,开发人员并不了解Scala语言,也不了解Spark常用的API,但又非常想要使用Spark框架提供的强大的数据分析能力。Spark的开发工程师们考虑到了这个问题,于是利用SQL语言的语法简洁、学习门槛低以及在编程语言中普及程度和…

开放式耳机推荐,盘点几款好用的开放式耳机

一款好的开放式蓝牙耳机不仅可以让我们缓解疲劳,还能更有动力,特别是音质的表现,如果一款开放式耳机的音质表现不好,那这款耳机也就没有多大意义了,还有就是佩戴舒适性,所以选择一款好的开放式蓝牙耳机也很…

vs2015调试时无法显示QT变量值

问题描述: vs2015调试时无法显示 QT变量值,只能显示地址,导致想要查看变量值的时候,只能想办法打印出来,非常麻烦。如下图: 问题解决: 调试 - 选项 - 调试 - 常规 - 去掉 使用本机兼容性模式&am…

压测性能调优之gateway网关

1、 压测资源和场景 (1)14个接口同时压测5000并发; (2)服务资源:采用k8s部署,总共25台8核64G阿里云机器,node节点个数22个,master3个,15个网关实例&#xf…

综合评价算法 | Matlab实现基于CRITIC法的综合评价算法

文章目录 效果一览文章概述研究内容源码设计参考资料效果一览 文章概述 综合评价算法 | Matlab实现基于CRITIC法的综合评价算法 研究内容 CRITIC法是一种比熵权法和标准离差法更好的客观赋权法。它是基于评价指标的对比强度和指标之间的冲突性来综合衡量指标的客观权重。考虑指…

【AttributeError: module ‘cv2‘ has no attribute ‘saliency‘】

AttributeError: module ‘cv2’ has no attribute ‘saliency’ 问题解析 已经成功安装cv2且import cv2成功的情况下(如下图黄色框所示),在运行时报如下所示错误: AttributeError: module cv2 has no attribute saliency 这个错…

Guitar Pro8.1最新版吉他练习好助手

Guitar Pro研发团队深知「简谱」之于中国用户的重要性,在经过几个月的测试和开发,最新的Guitar Pro软件已全面支持简谱功能!会带给您音乐学习和创作的极大便利。相信玩吉他的朋友多多少少都听说过Guitar Pro这款软件,那大家知道Gu…

stable diffusion 调试天坑 (setup.py)

第一次下载V1的stable diffusion (https://github.com/CompVis/stable-diffusion) 到本地调试,根据其要求创建了虚拟环境,自动运行了setup.py文件,长这样 from setuptools import setup, find_packagessetup(namelatent-diffusion,version0.…

张驰咨询:精益生产管理消除浪费,提高效率,降低成本!

精益生产管理是一种以消除浪费为主的生产管理方法。它起源于日本,此后被世界各地的企业所采用和实践。下面张驰咨询探讨精益生产管理的作用及其对企业。 1. 精益生产管理的作用 提高生产效率:通过消除浪费,精益生产管理可以使企业在相同的时…

动态规划——区间dp [石子合并]

动态规划——区间dp 什么是动态规划区间dp定义应用 例题引入题目描述输入格式输出格式样例样例输入样例输出 提示 贪心法区间dp优缺点:AC代码:代码详解三层for循环状态转移方程环形的处理 什么是动态规划 动态规划(dp)是一种通过…

高数基础10不定积分

目录 不定积分 原函数存在定理: 定理1 定理2: 例题1: 例题2: 例题3: 不定积分的性质: 不定积分的基本公式: 例题4: 例题5: ​编辑 例题6: 三种主要积分法…

喜讯!安全狗再次获得“纳税大户”称号

近日,厦门市思明区人民政府公布了《2022年度纳税大户名单》。安全狗入选名单并被授予“2022年度纳税大户”称号。 厦门服云信息科技有限公司(品牌名:安全狗)成立于2013年,致力于提供云安全、(云&#xff09…

入门_科研论文写作

不整理笔记,等于没学过(for me🙃) Ideas 多读论文动手做实验 找对应的、最新的数据集(比如某一类的效果欠佳,那是为什么捏) 从论文的实验分析得出结论 跑别人的代码,分析预测的数据…

LNMP架构及应用部署

LNMP架构及应用部署 安装nginx 关闭防火墙和selinux [rootlocalhost ~]#systemctl stop firewalld [rootlocalhost ~]# setenforce 0 [rootlocalhost ~]# iptables -F 安装依赖软件 [rootlocalhost ~]# mount /dev/cdrom /mnt ---挂载光盘(先要创建yum仓…

SQL-每日一题【511.游戏玩法分析Ⅰ】

题目 活动表 Activity: 写一条 SQL 查询语句获取每位玩家 第一次登陆平台的日期。 查询结果的格式如下所示: 解题思路 前置知识 MIN()函数 MIN 函数返回一列中的最小值。NULL 值不包括在计算中。 SQL MIN() 语法 SELECT MIN(co…