Spring 响应式编程,真香!!!

2023-01-18 09:59:48 来源: 程序员客栈
一、前言

响应式编程是啥?


(资料图片仅供参考)

为啥要有响应式编程?

响应式流的核心机制是什么?

Spring 响应式编程能解决我们平时开发的什么痛点?

Spring 响应式编程有哪些应用场景?

Spring 响应式编程未来的趋势如何?

开篇六连问,等咱们熟悉完再来真香也不迟,我们废话少说,直接来畅游 Spring 响应式编程的世界。

二、响应式编程是啥?

在计算中,响应式编程或反应式编程(Reactive programming)是一种面向数据串流和变化传播的声明式编程范式。这意味着可以在编程语言中很方便地表达静态或动态的数据流,而相关的计算模型会自动将变化的值通过数据流进行传播。

有点抽象?没有关系,老周这就来说道说道。核心的一点响应式编程是声明式编程范式,对命令式编程进行替代的一个范例,这种替代的存在是因为响应式编程解决了命令式编程的限制。大多数开发者都是命令式编程起步的,你写的代码就是一行接一行的指令,按照它们的顺序一次一条地出现。一个任务被执行,程序就需要等到它执行完了,才能执行下一个任务。每一步,数据都需要完全获取到了才能被处理,因此它需要作为一个整体来处理。

命令式编程有个最大的弊端是:当正在执行的任务被阻塞了,特别是一个 IO 任务,例如将数据写入到数据库或从远程服务器获取数据,那么调用该任务的线程将无法做任何事情,直到任务完成。说白了,阻塞的线程就是一种浪费,在如今的环境,线程的资源是那么的宝贵。

相反,响应式编程是函数式和声明式的。响应式编程涉及描述通过该数据流的 pipeline 或 stream,而不是描述的一组按顺序执行的步骤。响应式流处理数据时只要数据是可用的就进行处理,而不是需要将数据作为一个整体进行提供。

三、为啥要有响应式编程?

我们上面也说了命令式编程会线程阻塞,而响应式编程是声明式编程范式的,是对命令式编程进行替代的一个范例。

对于命令式编程的同步阻塞,其实业界是有一些处理方案的,比如在 Java 中,为了实现异步非阻塞,一般会采用回调和 Future 这两种机制,但这两种机制都存在一定局限性。

3.1 回调机制

我们来看下面这个图:

服务 B 的 methodB() 方法调用服务 A 的 methodA() 方法,然后服务 A 的 methodA() 方法执行完毕后,再主动调用服务 B 的 callback() 方法。

回调体现的是一种双向的调用方式,实现了服务 A 和服务 B 之间的解耦。在这个 callback 回调方法中,回调的执行是由任务的结果来触发的,所以我们就可以异步来执行某项任务,从而使得调用链路不发生任何的阻塞。

回调的最大问题是复杂性,一旦在执行流程中包含了多层的异步执行和回调,那么就会形成一种嵌套结构,给代码的开发和调试带来很大的挑战。所以回调很难大规模地组合起来使用,因为很快就会导致代码难以理解和维护,从而造成所谓的“回调地狱”问题。之前公司就遇到代码“回调地狱”问题,十几层的回调,后面的人进来维护估计会吐。

3.2 Future 机制

我们再来看看 Future 这种机制,有一个需要处理的任务,然后把这个任务提交到 Future,Future 就会在一定时间内完成这个任务,而在这段时间内我们可以去做其他事情。下面我们来看看来自 Doug Lea 大神在 Java 中的 Future 接口设计:

我们可以看到,大神在上面的设计来达到一定的异步执行效果。但从本质上讲,Future 以及由 Future 所衍生出来的 CompletableFuture 等各种优化方案就是一种多线程技术。多线程假设一些线程可以共享一个 CPU,而 CPU 时间能在多个线程之间共享,这一点就引入了“上下文切换”的概念。

如果想要恢复线程,就需要涉及加载和保存寄存器等一系列计算密集型的操作。因此,大量线程之间的相互协作同样会导致资源利用效率低下。

3.3 响应式编程实现方法3.3.1 数据流与响应式

数据流就是数据像水流一样源源不断的输入过来,而系统的响应能力就体现在对这些数据流的即时响应过程上。我们可以不采用传统的同步调用方式来处理数据,而是由处于数据库上游的各层组件自动来执行事件,从web到service再到dao层,这个过程就像水流一样,整个数据传递链路都应该是采用事件驱动的方式来进行运作的,这个过程都应该是异步非阻塞的,这就是响应式编程的核心特点。

相较传统开发所普遍采用的“拉”模式,在响应式编程下,基于事件的触发和订阅机制,这就形成了一种类似“推”的工作方式。说白了,就类似现在的 Kafka 等消息引擎,大部分都采用事件驱动的 pub/sub 模式的架构。这种模式的最大优势是生成事件和消费事件的过程是异步执行的,意味着资源之间的竞争关系较少,故服务器的响应能力也就越高。

3.3.2 响应式宣言

响应式宣言是一份构建现代云扩展架构的处方。这个框架主要使用消息驱动的方法来构建系统,在形式上可以达到弹性和韧性,最后可以产生响应性的价值。所谓弹性和韧性,通俗来说就像是橡皮筋,弹性是指橡皮筋可以拉长,而韧性指在拉长后可以缩回原样。

响应性: :只要有可能,系统就会及时地做出响应。即时响应是可用性和实用性的基石,而更加重要的是,即时响应意味着可以快速地检测到问题并且有效地对其进行处理。即时响应的系统专注于提供快速而一致的响应时间,确立可靠的反馈上限,以提供一致的服务质量。这种一致的行为转而将简化错误处理、建立最终用户的信任并促使用户与系统作进一步的互动。

韧性:系统在出现失败时依然保持即时响应性。这不仅适用于高可用的、任务关键型系统——任何不具备回弹性的系统都将会在发生失败之后丢失即时响应性。回弹性是通过复制、遏制、隔离以及委托来实现的。失败的扩散被遏制在了每个组件内部,与其他组件相互隔离,从而确保系统某部分的失败不会危及整个系统,并能独立恢复。每个组件的恢复都被委托给了另一个(外部的)组件,此外,在必要时可以通过复制来保证高可用性。(因此)组件的客户端不再承担组件失败的处理。

弹性:系统在不断变化的工作负载之下依然保持即时响应性。反应式系统可以对输入(负载)的速率变化做出反应,比如通过增加或者减少被分配用于服务这些输入(负载)的资源。这意味着设计上并没有争用点和中央瓶颈,得以进行组件的分片或者复制,并在它们之间分布输入(负载)。通过提供相关的实时性能指标,反应式系统能支持预测式以及反应式的伸缩算法。这些系统可以在常规的硬件以及软件平台上实现成本高效的弹性。

消息驱动:反应式系统依赖异步的消息传递,从而确保了松耦合、隔离、位置透明的组件之间有着明确边界。这一边界还提供了将失败作为消息委托出去的手段。使用显式的消息传递,可以通过在系统中塑造并监视消息流队列,并在必要时应用回压,从而实现负载管理、 弹性以及流量控制。使用位置透明的消息传递作为通信的手段, 得跨集群或者在单个主机中使用相同的结构成分和语义来管理失败成为了可能。非阻塞的通信使得接收者可以只在活动时才消耗资源,从而减少系统开销。

问题:消息驱动与上面提到的事件驱动有啥区别呢?

响应式宣言指出了两者的区别:“消息驱动”中消息数据被送往明确的目的地址,有固定导向;“事件驱动”是事件向达到某个给定状态的组件发出的信号,没有固定导向,只有被观察的数据。

在一个消息驱动系统中,可寻址的接收者等待消息的到来然后响应消息,否则保持休眠状态,消息驱动系统专注于可寻址的接收者。响应式系统更加关注分布式系统的通信和协作以达到解耦、异步的特性,满足系统的弹性和容错性,所以响应式系统更倾向于使用消息驱动模式。

在一个事件驱动系统中,通知的监听者被绑定到消息源上。这样当消息被发出时,它就会被调用,所以,响应式编程更倾向于事件驱动。

下一篇老周会来说下响应式流的核心机制是什么?敬请期待~


欢迎大家关注我的公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。

标签: 事件驱动 异步执行 消息传递

Spring 响应式编程,真香!!!

一、前言响应式编程是啥?为啥要有响应式编程?响应式流的核心机制是什么?Spring响应式编程能解决我们...

01-18 09:59:48

异丙醇板块1月17日涨0.17%,晶瑞电材领涨,主力资金净流出3948.73万元|环球讯息

1月17日异丙醇板块较上一交易日上涨0 17%,晶瑞电材领涨。当日上证指数报收于3224 24,下跌0 1%。深...

01-18 04:29:49

[快讯]凯发电气:广发证券股份有限公司天津凯发电气股份有限公司部分募集资金投资项目实施主体由全资子公司变更为控股子公司的核查意见

CFi CN讯:(一)募集资金到位情况经中国证券监督管理委员会证监许可[2018]604号《关于核准天津凯发电...

01-17 20:04:19

广东省2023年面向港澳台地区招收研究生报名网上确认通告 世界最资讯

根据教育部工作部署,2023年面向港澳台研究生招生报名包括网上报名和网上(现场)确认两个阶段。所有参...

01-17 16:35:48

深圳人才安居集团6亿元超短期融资券完成发行 利率2.3%

观点网讯:1月17日,深圳人才安居集团有限公司公开了2023年度第一期超短期融资券发行情况公告。观点新媒...

01-17 13:38:35

全球速讯:国家统计局:2022年城镇新增就业1206万人

本地户籍劳动力调查失业率为5 4%;外来户籍劳动力调查失业率为5 7%,其中外来农业户籍劳动力调查失业...

01-17 10:19:07

世界今头条!抗菌面料板块1月16日跌0.05%,安奈儿领跌,主力资金净流出1.58亿元

1月16日抗菌面料板块较上一交易日下跌0 05%,安奈儿领跌。当日上证指数报收于3227 59,上涨1 01%。深...

01-17 04:20:49

008期豹子头双色球预测奖号:冷温热码分析 聚焦

开奖回顾:双色球第2023005期期(上周星期二)奖号为020608131419+16,其中红球号码遗漏期数分别为:0周、...

01-16 18:39:59

今日精选:《回来的女儿》大结局

《回来的女儿》是由吕行执导,张子枫、王砚辉、梅婷、李乃文领衔主演的家庭悬疑剧。讲述了二十世纪90年...

12-28 15:51:49

世界今热点:海辰药业:感谢对海辰药业的关注!截至12月20日,公司股东人数为19863

海辰药业(300584)12月28日在投资者关系平台上答复了投资者关心的问题。投资者:请问12 20股东户数海辰...

12-28 12:08:38

全球讯息:东星医疗:融资净偿还170.79万元,融资余额3588.03万元(12-27)

2022年12月27日东星医疗融资净偿还170 79万元,融资余额3588 03万元

12-28 09:13:08

全球新动态:全 聚 德: 关于召开2023年第一次临时股东大会的通知

证券代码:002186           证券简称:全聚德              公告编号:2022-...

12-27 21:39:08

环球快看:你我贷网贷逾期7个月多久上征信

网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天...

12-27 16:53:48

天天快看:国家一级重点保护野生植物资源冷杉实现野外回归

广西新闻网-广西日报桂林讯(记者李家健)12月26日,记者从桂林市林业和园林局获悉,国家一级重点保护野...

12-27 08:10:00

全球关注:体重近300斤男子发高烧无法就医,消防员上门成功转运

大河报·豫视频记者邵可强近日,洛阳一男子因感染新冠引发高烧惊厥,但因体重近300斤无法转运就医,洛阳...

12-26 18:58:39

世界动态:榴莲吃不完怎样储存?

一,直接冷藏。把没吃完的榴莲去掉果壳,然后找干净的包装袋装好,放入冰箱的冷藏室。需要吃的时候直接...

12-26 14:07:42

全球简讯:驻马店境内两条高速公路将于12月26日同时建成通车

驻马店网讯(记者张勇)12月25日,记者从市交通运输局获悉,位于我市境内的许信、上罗高速公路将于12月2...

12-26 08:51:25

环球滚动:男士本命年送什么礼物好 男士本命年送礼推荐

1、红皮带。对于大部分男性朋友来说,皮带都是经常用到的东西,将其当作礼物的话实用性很高。不过需要注...

12-25 16:38:17

最资讯丨日本强降雪已致13死85伤 多地交通受阻

据日本广播协会(NHK)24日报道,受强冷空气影响,日本北海道、日本海沿岸的中部地区强降雪仍在持续,多...

12-24 19:55:41

焦点快播:贴了暖宫贴可以坐飞机吗

关于贴了暖宫贴可以坐飞机吗的内容,包含暖宫贴可以带上飞机吗暖宫贴可以上飞机吗月经量少贴暖宫贴有用吗...

12-24 03:48:43

全球播报:[快讯]ST围海:工程项目中标

CFi CN讯:浙江省围海建设集团股份有限公司(以下简称“公司”、“该公司”)于2022年12月23日收到《中...

12-23 17:01:13

世界快看点丨中科曙光董秘回复:公司目前控制权稳定,尚不存在影响公司实际控制权的情况

中科曙光(603019)12月23日在投资者关系平台上答复了投资者关心的问题。

12-23 11:23:14

全球视点!支持开票 | Python实证指标构建与文本分析

付费课程|支持开票|购前咨询微信372335839概览为何要学Python?在科学研究中,数据的获取及分析是最重要...

12-23 04:47:37

焦点快看:国邦医药(605507.SH):子公司浙江国邦通过GMP符合性检查

格隆汇12月22日丨国邦医药公布,近日,公司全资子公司浙江国邦药业有限公司从浙江省药品监督管理局网站...

12-22 17:15:12

环球最资讯丨数字政通董秘回复:股权激励是吸引人才,持续保持核心竞争力的有效工具

数字政通(300075)12月22日在投资者关系平台上答复了投资者关心的问题。

12-22 10:55:04

环球简讯:这个数码评测网站,治好了我的选择困难症。

另一方面它所有产品的测试也都是在同个平台上完成,测试过程和方法完全透明并且都有对应的数据作为支撑...

12-22 00:09:38

【全球新要闻】质押贷款逾期39天会不会上征信

网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天...

12-21 15:53:03

世界快看点丨天振股份董秘回复:11月下旬公司董事长已应邀赴美国拜访SHAW等主要客户

天振股份(301356)12月21日在投资者关系平台上答复了投资者关心的问题。

12-21 09:47:02

播报:安徽省江北产业集中区原管委会主任唐开强一审获刑10年半

12-20 21:49:52

最新消息:三友联众董秘回复:这是公司的一个长远目标,不构成公司的盈利预测或业绩承诺,请投资者注意风险

三友联众(300932)12月20日在投资者关系平台上答复了投资者关心的问题。

12-20 14:23:42

每日焦点!【8点见】社区人员“发放健康包拍照后拿走”?当地回应

央视网消息:每天8点,央视网为您梳理24小时内发生在咱们身边的大小事儿。·12月20,白鹤滩水电站16台百...

12-20 08:26:24

全球球精选!*ST长方: 关于2021年度审计报告所涉风险事项调查报告的公告

证券代码:300301           证券简称:*ST长方   公告编号:2022-131         ...

12-19 19:47:32

当前头条:美利云:公司IDC全套牌照已续期

(原标题:美利云:公司IDC全套牌照已续期)同花顺(300033)金融研究中心12月19日讯,有投资者向美利云...

12-19 14:36:18

世界新动态:中邮钱包逾期还不上会有什么后果

网贷逾期一般会上征信,有些借贷机构在用户逾期后一天后就会上报给征信机构,而有些借贷机构则是会在几天...

12-19 08:52:22

全球快讯:点赞漳州|漳州市商务局:全闽乐购 打造繁荣有序的城市消费场景

点赞漳州|漳州市商务局:全闽乐购打造繁荣有序的城市消费场景

12-18 22:53:54

当前关注:上市公司跨界“抢锂”还需多思量

上市公司蜂拥挤上锂赛道,“钱途”未必一片大好。受新能源汽车市场供需两旺拉动,近年来,锂电产业链价...

12-18 05:56:08

速看:中央关于科技政策最新表述该怎么看? 邬贺铨院士解读

中央关于科技政策最新表述该怎么看?邬贺铨院士解读2022年12月17日01:24中国新闻网

12-17 11:24:56

全球快播:中国天化工(00362.HK):资本重组已于12月16日生效

格隆汇12月16日丨中国天化工公告,于股东特别大会上通过批准资本重组的决议案后,董事会宣布,资本重组...

12-16 19:48:57

焦点资讯:百洋医药:公司直接及间接持有安士制药(中山)有限公司共计29.12%股权

百洋医药:公司直接及间接持有安士制药(中山)有限公司共计29 12%股权

12-16 14:38:21

世界观点:北京多区开打“第四针”,为何打?谁能打?种类有哪些?

《新冠病毒疫苗第二剂次加强免疫接种实施方案》日前发布,北京市东城、海淀等区于12月15日起陆续开启接...

12-16 07:56:45

每日焦点!濮阳县警方及时出手救助一名走失儿童获好评

濮阳县公安局巡特警大队牢固树立全心全意为人民服务的理念,积极为群众排忧解难。近日,该局民警在城区...

12-15 19:09:04

【报资讯】现在的超市劳动合同模板是哪些样子的?

《劳动法》第十九条规定:劳动合同应当以书面形式订立,并具备以下条款:(一)劳动合同期限;(二)工...

12-15 14:13:56

今日最新!元琛科技(688659)12月14日主力资金净卖出5818.90万元

截至2022年12月14日收盘,元琛科技(688659)报收于20 03元,下跌4 89%,换手率13 31%,成交量11 5万手,成交额2 39亿元。

12-15 07:39:49

当前热讯:凤凰光学: 凤凰光学股份有限公司2022年第二次临时股东大会决议公告

凤凰光学:凤凰光学股份有限公司2022年第二次临时股东大会决议公告

12-14 17:24:04

每日视点!钱江太子摩托车,风暴太子150

质量比劣质品牌的车好。油,前后正品空轮胎,外饰件做工精细。当然,极速是安全的,也是爆炸性的。想买...

12-14 12:40:32

【环球热闻】12月13日基金净值:嘉实新财富混合最新净值1.075,涨0.66%

12月13日,嘉实新财富混合最新单位净值为1 075元,累计净值为1 42元,较前一交易日上涨0 66%。历史数...

12-14 01:29:32

世界速读:武进不锈(603878)12月13日主力资金净卖出190.62万元

截至2022年12月13日收盘,武进不锈(603878)报收于11 18元,下跌5 57%,换手率1 97%,成交量7 9万手,成交额9006 13万元。

12-13 14:56:43

全球微动态丨5次集中行动破案671起 湖北公安“剥茧”行动为群众挽回损失1.7亿元

5次集中行动破案671起湖北公安“剥茧”行动为群众挽回损失1 7亿元---截至12月上旬,“剥茧”系列集中行...

12-13 08:25:47

【世界新视野】彩讯股份: 关于向特定对象发行股票限售股份上市流通提示性公告

证券代码:300634       证券简称:彩讯股份          公告编号:2022-086     ...

12-12 18:06:25

实时焦点:雏菊种植方法 雏菊如何种植呢

1、选择盆土:雏菊盆土的选择还是比较重要的,雏菊种植对盆土的要求并不是也别高,最好能够选择透气性比...

12-12 13:34:47

异丙醇板块1月17日涨0.17%,晶瑞电材领涨,主力资金净流出3948.73万元|环球讯息
[快讯]凯发电气:广发证券股份有限公司天津凯发电气股份有限公司部分募集资金投资项目实施主体由全资子公司变更为控股子公司的核查意见
广东省2023年面向港澳台地区招收研究生报名网上确认通告 世界最资讯
深圳人才安居集团6亿元超短期融资券完成发行 利率2.3%
全球速讯:国家统计局:2022年城镇新增就业1206万人
世界今头条!抗菌面料板块1月16日跌0.05%,安奈儿领跌,主力资金净流出1.58亿元
008期豹子头双色球预测奖号:冷温热码分析 聚焦
今日精选:《回来的女儿》大结局
世界今热点:海辰药业:感谢对海辰药业的关注!截至12月20日,公司股东人数为19863
全球讯息:东星医疗:融资净偿还170.79万元,融资余额3588.03万元(12-27)
全球新动态:全 聚 德: 关于召开2023年第一次临时股东大会的通知
环球快看:你我贷网贷逾期7个月多久上征信
天天快看:国家一级重点保护野生植物资源冷杉实现野外回归
全球关注:体重近300斤男子发高烧无法就医,消防员上门成功转运
世界动态:榴莲吃不完怎样储存?
全球简讯:驻马店境内两条高速公路将于12月26日同时建成通车
环球滚动:男士本命年送什么礼物好 男士本命年送礼推荐
最资讯丨日本强降雪已致13死85伤 多地交通受阻
焦点快播:贴了暖宫贴可以坐飞机吗
全球播报:[快讯]ST围海:工程项目中标
世界快看点丨中科曙光董秘回复:公司目前控制权稳定,尚不存在影响公司实际控制权的情况
全球视点!支持开票 | Python实证指标构建与文本分析
焦点快看:国邦医药(605507.SH):子公司浙江国邦通过GMP符合性检查
环球最资讯丨数字政通董秘回复:股权激励是吸引人才,持续保持核心竞争力的有效工具
环球简讯:这个数码评测网站,治好了我的选择困难症。
【全球新要闻】质押贷款逾期39天会不会上征信
世界快看点丨天振股份董秘回复:11月下旬公司董事长已应邀赴美国拜访SHAW等主要客户
播报:安徽省江北产业集中区原管委会主任唐开强一审获刑10年半
最新消息:三友联众董秘回复:这是公司的一个长远目标,不构成公司的盈利预测或业绩承诺,请投资者注意风险
每日焦点!【8点见】社区人员“发放健康包拍照后拿走”?当地回应
全球球精选!*ST长方: 关于2021年度审计报告所涉风险事项调查报告的公告
当前头条:美利云:公司IDC全套牌照已续期
世界新动态:中邮钱包逾期还不上会有什么后果
全球快讯:点赞漳州|漳州市商务局:全闽乐购 打造繁荣有序的城市消费场景
当前关注:上市公司跨界“抢锂”还需多思量
速看:中央关于科技政策最新表述该怎么看? 邬贺铨院士解读
全球快播:中国天化工(00362.HK):资本重组已于12月16日生效
焦点资讯:百洋医药:公司直接及间接持有安士制药(中山)有限公司共计29.12%股权
世界观点:北京多区开打“第四针”,为何打?谁能打?种类有哪些?
每日焦点!濮阳县警方及时出手救助一名走失儿童获好评
【报资讯】现在的超市劳动合同模板是哪些样子的?
今日最新!元琛科技(688659)12月14日主力资金净卖出5818.90万元
当前热讯:凤凰光学: 凤凰光学股份有限公司2022年第二次临时股东大会决议公告
每日视点!钱江太子摩托车,风暴太子150
【环球热闻】12月13日基金净值:嘉实新财富混合最新净值1.075,涨0.66%
世界速读:武进不锈(603878)12月13日主力资金净卖出190.62万元
全球微动态丨5次集中行动破案671起 湖北公安“剥茧”行动为群众挽回损失1.7亿元
【世界新视野】彩讯股份: 关于向特定对象发行股票限售股份上市流通提示性公告
实时焦点:雏菊种植方法 雏菊如何种植呢
世界即时看!博晖创新: 关于高级管理人员减持股份的预披露公告
X 广告
行业动态
X 广告

Copyright ©  2015-2022 现在植物网版权所有  备案号:粤ICP备18023326号-5   联系邮箱:855 729 8@qq.com