首页 > 其他分享 >消息队列的作用?

消息队列的作用?

时间:2024-11-17 22:19:20浏览次数:3  
标签:异步 请求 队列 购票 处理 消息 作用

先告诉你答案: 异步、削峰、解耦。

异步

异步对应着同步,了解异步先了解什么是同步。

同步: 请求发送后,在收到结果之前一直等待。

异步: 请求发送后,可以去做其他事情。

下面来看一个同步案例

        用户发送请求之后,会一直等待,整个链路调用时间150ms+200ms+200ms=550ms。但是这两个200ms是没必要等待的,我们完成购票后,难道要一直等短息和邮件吗? 那如果短信和邮件在高流量场景延迟大的情况,我们需要等待更长的时间,这期间还不能做其他事,体验感非常差。

下面来看个加入消息队列实现异步的案例

        用户向购票系统发购票请求,然后消息存入消息队列,一共花费150ms+10ms=160ms,剩下的时间我们可以去做其他的操作,大幅度提升用户体验效果。但是我们需要注意的是,整个流程的时长是没变的,就像你仅仅告诉服务员要吃什么是不会影响到做餐的速度的。 

削峰

        这个比较好理解。

        例如你开发的系统1秒只能处理500条请求,此时来了10000条,那么9500条请求得不到有效处理。

        我们将消息的接收和消息的处理分开做就会好很多,一个地方专门接收消息,不进行处理,这些消息会被放进消息队列,由消费者,也就是消息处理方去慢慢的处理。这样的话即使某时间流量很大,系统也能进行处理,无非是慢一点。

解耦

        例如目前我们的业务有三个功能: 校验、购票、发送短信。

此时你接到领导的要求,需要添加邮箱业务、积分业务,你的想法是不是像下图一样,直接在后面添加。这样就违反了开闭原则(不懂开闭原则可以搜一下)。

这个做法缺点很多:

1. 业务复杂的时候,我们需要过一遍代码,再写新需求,以防影响之前的业务,非常费时间。

2. 我们新增添的代码有可能影响原来程序的运行。

3. 毫无拓展性、维护性可言,当我们一直有新增需求的时候,这块代码越写越长,越来越难改,别人接手你的项目就像接到了一坨**

一个比较好的解决办法就是用消息队列进行解耦

        例如下图,如果我要新增一个业务,在购票的时候增加积分,我们就可以做一个积分系统,并且在消息队列订阅购票话题(下图右侧如同短信系统、邮件系统一样),这样的话,用户购票也会进行积分增加,在没动源代码的情况下面完成了功能新增。

标签:异步,请求,队列,购票,处理,消息,作用
From: https://blog.csdn.net/weixin_52136521/article/details/143839395

相关文章

  • 【Rabbitmq篇】RabbitMQ⾼级特性----消息确认
    目录前言:一.消息确认机制 •⾃动确认•⼿动确认 手动确认方法又分为三种:二. 代码实现(spring环境)配置相关信息:1).AcknowledgeMode.NONE 2)AcknowledgeMode.AUTO3)AcknowledgeMode.MANUAL总结:前言:前期讲了RabbitMQ的概念和应⽤,RabbitMQ实现了AMQP0-9-1规范的......
  • TYPE-C PD供电协议消息格式
    TYPE-CPD供电协议消息格式PD定义了两种消息类型,分别为控制消息(ControlMessages)、数据消息(DataMessages)和扩展消息(ExtendMessages)。PD控制消息控制消息属于短消息类型,用于管理端口与设备之间的消息流或交换不需要额外数据的消息。控制消息的长度为16位长。控制消息的包......
  • 删除字符串中的所有相邻重复项--栈与队列
    第一版的代码如下下:点击查看代码classSolution{public:stringremoveDuplicates(strings){stack<char>str;for(inti=0;i<s.size();i++){//要先判断才能进行压栈,再次记住栈一定要先判断是否为空i......
  • 高并发编程/消息传递机制避免锁提高并发效率,不懂的赶紧进来(设计篇)
    在现代软件开发中,随着多核处理器的普及和分布式系统的扩展,传统的基于共享内存的并发模型正面临越来越多的挑战。消息传递机制作为一种替代方案,以其独特的异步通信和无共享状态的特性,为构建高效、可扩展和健壮的系统提供了新的思路。它通过将数据操作封装在消息中,允许系统组......
  • 全面指南 | 知识库管理系统在零售行业中的作用是什么?
    中国的零售行业在2023年展现出了稳健的增长态势。根据国家统计局的数据,2023年国内社会消费品零售总额为47.15万亿元,同比增长7.2%。有一点是明确的——零售行业只会继续蓬勃发展。在这个不断壮大的巨大行业中,要想在竞争激烈的市场中脱颖而出绝非易事。问题是,如何才能成为顾......
  • 3C产品跨境电商:知识库管理系统如何起作用?
    在数字化和全球化的浪潮中,3C产品(计算机、通信和消费类电子产品)跨境电商行业正以前所未有的速度发展。然而,随着市场规模的扩大,企业面临的挑战也日益复杂。为了在激烈的市场竞争中保持领先地位,3C产品跨境电商企业不仅需要高效的运营和管理体系,还需要一个强大的知识库管理系统......
  • DAY65||Bellman_ford 队列优化算法(又名SPFA)|bellman_ford之判断负权回路|bellman_ford
    Bellman_ford队列优化算法(又名SPFA)94.城市间货物运输I思路大家可以发现Bellman_ford算法每次松弛都是对所有边进行松弛。但真正有效的松弛,是基于已经计算过的节点在做的松弛。给大家举一个例子:本图中,对所有边进行松弛,真正有效的松弛,只有松弛边(节点1->节点2)和......
  • 数据结构——栈和队列的模拟实现
    文章目录前言一、栈1.1概念与结构1.2栈的实现二、队列2.1概念与结构2.2队列的实现总结前言继上篇博客,已经把链表的有关习题完成,链表也已经收尾啦。今天来学习新的数据结构——栈和队列,fellowme一、栈1.1概念与结构栈:⼀种特殊的线性表,其只允许在固定......
  • C++编程:实现一个简单的消息总线
    文章目录0.引言1.设计思路1.1关键类设计1.2类图1.3时序图1.4流程图2.代码结构与设计2.1消息回调与订阅项2.2消息总线类`MessageBus`2.3定时任务调度器`PeriodicTaskScheduler`3.核心功能实现3.1消息发布3.2超时检查4.测试代码0.引言在之前的文......
  • css制作消息框
     css如下:        .msg{            width:200px;height:50px;            margin-bottom:20px;            background:#20B2AA;color:#fff;            text-align:center;line-height:50px;......