当前位置:首页 > 科技  > 软件

听说异步和解耦才是消息队列最有价值的功能

来源: 责编: 时间:2024-07-11 09:29:15 791观看
导读消息队列作为互联网互联网项目的一个可选中间件,被很多的项目、产品采用。就算你没用过,肯定也多少了解一些,因为它是现代面试八股文必考科目之一。消息队列这个很形象,就是把消息推到一个队列中,然后再到这个队列里读,是不

消息队列作为互联网互联网项目的一个可选中间件,被很多的项目、产品采用。就算你没用过,肯定也多少了解一些,因为它是现代面试八股文必考科目之一。PzS28资讯网——每日最新资讯28at.com

消息队列这个很形象,就是把消息推到一个队列中,然后再到这个队列里读,是不是就这么简单。PzS28资讯网——每日最新资讯28at.com

图片图片PzS28资讯网——每日最新资讯28at.com

听说消息队列最有用的功能是异步和解耦,而什么消峰填谷、分布式事务都是锦上添花而已。PzS28资讯网——每日最新资讯28at.com

常用的消息队列

RocketMQ

RocketMQ 是阿里巴巴开发,现在已经是 Apache 软件基金会的顶级项目。RocketMQ 是用 Java 开发,很多使用 Java 技术栈的公司都用 RocketMQ 作为消息队列。我们就主要使用 RocketMQ 作为消息队列服务。PzS28资讯网——每日最新资讯28at.com

RabbitMQ

RabbitMQ 是一个开源的消息代理软件,它采用了高级消息队列协议(AMQP),用于在分布式系统中实现异步通信和消息传递,采用 Erlang 语言开发。最开始学习消息队列就是用的 RabbitMQ。PzS28资讯网——每日最新资讯28at.com

Apache Kafka

pache Kafka 是一个分布式流处理平台,最初由 LinkedIn 开发,并于2011年开源,之后成为 Apache 软件基金会的顶级项目。Kafka 旨在处理实时数据流,具有高吞吐量、低延迟和高可靠性的特点,广泛应用于日志收集、流处理、数据集成等场景。PzS28资讯网——每日最新资讯28at.com

ActiveMQ

Apache ActiveMQ 是一个开源的消息代理和集成模式服务器,由 Apache 软件基金会开发。ActiveMQ 在形式上和 RabbitMQ 比较像,ActiveMQ 也是用 Java 开发的。PzS28资讯网——每日最新资讯28at.com

除此之外,其实 Redis 也可以做消息队列。PzS28资讯网——每日最新资讯28at.com

消息队列的应用场景

消息队列最厉害的地方并不是采用的技术有多厉害,而是它的应用场景,只要把它加到某些应用场景中,有很多问题都可以迎刃而解。所以说,它厉害在思想上。PzS28资讯网——每日最新资讯28at.com

异步处理和解耦

说到异步就离不开解耦,说到解耦又脱离不了异步。PzS28资讯网——每日最新资讯28at.com

什么是异步呢?假设有个系统需要处理一个长流程,最常见的例子就是下单场景,用户下单购买商品,后台服务要在这个下单行为发生后做一系列的事情,要减库存、加到用户已购买列表中、发通知、跟踪订单进度等。PzS28资讯网——每日最新资讯28at.com

这一系列的动作如果全都同步来做,那响应时间会比较久,而且一旦其中某个环节失败,将会更加麻烦。PzS28资讯网——每日最新资讯28at.com

所以针对类似的场景,就有了异步处理的思路,在同步响应中只把最重要的动作完成,剩下的都可以异步处理,比如购买行为,收钱和减库存是最重要的,这两个成功了就算是购买成功了,剩下的通知、跟踪进度都可以稍后进行,也就是异步处理。PzS28资讯网——每日最新资讯28at.com

说到此,解耦也就出现了,收钱和减库存可以是一个线程来做,或者一个单独的服务来做,发通知又可以是另一个线程或者另一个服务来做,这样一来,两个动作、两个功能就解耦了,发通知的服务挂了不会影响真正的购买行为,而等到发通知服务启动后,可以再处理历史数据也没问题。PzS28资讯网——每日最新资讯28at.com

这个场景下,用到消息队列再合适不过。而且听说,这个场景才是消息队列有价值的地方,也是消息队列思想的灵魂所在。PzS28资讯网——每日最新资讯28at.com

流量削峰

流量削峰是在高并发情况下,通过消息队列将大量请求排队处理,避免系统在短时间内被大量请求压垮。PzS28资讯网——每日最新资讯28at.com

假设一个系统本来日常只支持1万并发,但是某个时候突然有大量的用户进来,流量超过了系统所能承受的最大值,如果不加以控制,那等待系统的只有崩溃。PzS28资讯网——每日最新资讯28at.com

这种情况下,系统可以将处理不了的请求暂时放到消息队列中,然后在系统所能支持的并发下依次处理队列中的请求。这样一来,系统既不会崩溃,也能将请求都一一处理掉。PzS28资讯网——每日最新资讯28at.com

当然了,如果没有消息队列,本身系统也可以采取其他的处理措施,比如直接将请求丢弃,或者返回一个固定值。比如某些抢购场景,本来就有数量限制,只有最先进来的请求才能抢到,后面不管再进来多少都抢不到,那后面多余的请求就没必要处理。PzS28资讯网——每日最新资讯28at.com

日志处理

很多公司都有专门的日志查看平台,例如 Kibana,公司内所有项目都会归集到统一的地方,通过界面点点按钮就能看到不同项目的日志了。PzS28资讯网——每日最新资讯28at.com

这背后的原理就是将用户行为日志发送到消息队列,再由专门的日志处理服务进行分析和处理。自从 Kafka 一出来,再用消息队列传输日志就好像被它垄断了。没办法,谁让人家在这方面有特长呢。PzS28资讯网——每日最新资讯28at.com

分布式事务

分布式事务通俗来说就是要么都成功,要么都不成功。PzS28资讯网——每日最新资讯28at.com

还是拿订单系统为例,在订单创建后,通过消息队列通知库存系统进行库存扣减,以保证数据的一致性。PzS28资讯网——每日最新资讯28at.com

下图是 RocketMQ 中关于分布式事务的流程图,我们之前的项目中一直用这种方式做分布式事务处理。PzS28资讯网——每日最新资讯28at.com

图片图片PzS28资讯网——每日最新资讯28at.com

这是有些消息队列本身支持的特性,只有本地事务完全成功执行后,才会最终投递消息,否则消费者是看不到这个消息的。PzS28资讯网——每日最新资讯28at.com

延时任务

比如我们在 12306买票,预订后锁票,有30分钟时间用来付款,这30分钟内,其他人是没办法看到这张票的。如果30分钟内未付款,那这张票就不属于你了。PzS28资讯网——每日最新资讯28at.com

这种场景就是延时任务的经典场景,每一个预订都会有自己的一个任务,这种任务和系统定时在某时某刻的定时任务是完全不一样的。PzS28资讯网——每日最新资讯28at.com

就是因为每一个预订都有一个任务,总不能来一个任务就给系统加一个定时任务吧,这不现实。所以这种场景下,用延时队列就最合适了,有些消息队列是支持的。PzS28资讯网——每日最新资讯28at.com

在消息生产者投递消息时,给消息一个延迟时间,只有到了规定的延迟时间后,这个消息才能被消费者消费掉。PzS28资讯网——每日最新资讯28at.com

最后

消息队列最厉害的地方在于它的思想,而不在于它使用的具体技术。PzS28资讯网——每日最新资讯28at.com

消息队列的应用场景众多,但是这么多应用场景中我觉得异步和解耦才是最重要的能力,你觉得呢?PzS28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-100337-0.html听说异步和解耦才是消息队列最有价值的功能

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 介绍 11 个常用的 C++ 代码

下一篇: 三星 Galaxy Z Flip6 亮相:AI 助力大视野智能外屏,重塑移动生活体验

标签:
  • 热门焦点
  • Find N3入网:最高支持16+1TB

    OPPO将于近期登场的Find N3折叠屏目前已经正式入网,型号为PHN110。本次Find N3在外观方面相比前两代有很大的变化,不再是小号的横向折叠屏,而是跟别的厂商一样采用了较为常见的
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • 0糖0卡0脂 旭日森林仙草乌龙茶优惠:15瓶到手29元

    旭日森林无糖仙草乌龙茶510ml*15瓶平时要卖为79.9元,今日下单领取50元优惠券,到手价为29.9元。产品规格:0糖0卡0脂,添加草本仙草汁,清凉爽口,富含茶多酚,保留
  • 十个可以手动编写的 JavaScript 数组 API

    JavaScript 中有很多API,使用得当,会很方便,省力不少。 你知道它的原理吗? 今天这篇文章,我们将对它们进行一次小总结。现在开始吧。1.forEach()forEach()用于遍历数组接收一参
  • 线程通讯的三种方法!通俗易懂

    线程通信是指多个线程之间通过某种机制进行协调和交互,例如,线程等待和通知机制就是线程通讯的主要手段之一。 在 Java 中,线程等待和通知的实现手段有以下几种方式:Object 类下
  • 谷歌KDD'23工作:如何提升推荐系统Ranking模型训练稳定性

    谷歌在KDD 2023发表了一篇工作,探索了推荐系统ranking模型的训练稳定性问题,分析了造成训练稳定性存在问题的潜在原因,以及现有的一些提升模型稳定性方法的不足,并提出了一种新
  • WebRTC.Net库开发进阶,教你实现屏幕共享和多路复用!

    WebRTC.Net库:让你的应用更亲民友好,实现视频通话无痛接入! 除了基本用法外,还有一些进阶用法可以更好地利用该库。自定义 STUN/TURN 服务器配置WebRTC.Net 默认使用 Google 的
  • 联想的ThinkBook Plus下一版曝光,键盘旁边塞个平板

    ThinkBook Plus 是联想的一个特殊笔记本类别,它在封面放入了一块墨水屏,也给人留下了较为深刻的印象。据有人爆料,联想的下一款 ThinkBook Plus 可能更特殊,它
  • 亲历马斯克血洗Twitter,硅谷的苦日子在后头

    文/刘哲铭  编辑/李薇  马斯克再次挥下裁员大刀。  美国时间11月14日,Twitter约4400名外包员工遭解雇,此次被解雇的员工的主要工作为内容审核等。此前,T
Top