響應(yīng)式編程以及反應(yīng)式編程框架Reactor3的簡單介紹

福利

現(xiàn)在關(guān)注微信公眾號(hào):碼農(nóng)小胖哥腋粥, 發(fā)送關(guān)鍵字【抽獎(jiǎng)】進(jìn)行抽獎(jiǎng)晦雨,可有機(jī)會(huì)獲取實(shí)體編程書籍“澹【本次抽獎(jiǎng)截止到周末闹瞧,如果錯(cuò)過以后還有很多機(jī)會(huì)】

前言

Reactor 3是一個(gè)圍繞Reactive Streams規(guī)范構(gòu)建的庫,它在JVM上引入了響應(yīng)式編程的一個(gè)范例展辞。目前Spring5 引入的Webflux就是reactor 3實(shí)現(xiàn)的一個(gè)響應(yīng)式web框架奥邮。Spring Cloud Gateway是Webflux的一個(gè)網(wǎng)關(guān)場景實(shí)踐。想學(xué)好上面這兩項(xiàng)技術(shù)必須搞明白響應(yīng)式編程以及Reactor 3。本篇文章中洽腺,小胖哥將帶你來簡單了解響應(yīng)式編程和Reactor 3脚粟。

為什么要搞響應(yīng)式

有這么一個(gè)場景,產(chǎn)品提了一個(gè)這么需求:商品打折蘸朋,根據(jù)商品的原價(jià)來計(jì)算商品的折扣價(jià)核无。這個(gè)需求不是很簡單嘛,按照我們通常的做法藕坯,搞一個(gè)如下的方法就搞定了团南。

但是如果我折扣改了呢,這時(shí)有人該說重新計(jì)算啊炼彪。這樣是不是重新走了一次流程呢吐根,我們需要花精力來維護(hù)這種流程邏輯。那么能不能我下游能直接響應(yīng)上游的變化辐马?就像excel表格計(jì)算一樣拷橘,下游始終監(jiān)聽上游,有點(diǎn)風(fēng)吹草動(dòng)齐疙,結(jié)果就會(huì)變化膜楷。這種潛在的需求就是響應(yīng)式。響應(yīng)式編程正是用某種操作符幫助你構(gòu)建這種關(guān)系贞奋,而不是執(zhí)行某種賦值命令赌厅。這種思想其實(shí)在前端的一些框架中已經(jīng)風(fēng)靡很久了。

響應(yīng)式的特點(diǎn)

基于以上的一個(gè)簡單事例轿塔。我們可以看出如果是響應(yīng)式一定要有一個(gè)觸發(fā)點(diǎn)特愿。就像我們點(diǎn)擊了計(jì)算機(jī)桌面的QQ圖標(biāo)一只企鵝跳啊跳。我們點(diǎn)擊了迅雷圖標(biāo)有一只飛鳥在撲騰著翅膀勾缭。計(jì)算機(jī)只維護(hù)一個(gè)點(diǎn)擊圖標(biāo)的事件揍障。也就是說響應(yīng)式編程一定是一個(gè)事件觸發(fā)機(jī)制。并且是以異步和非阻塞的方式發(fā)送和接收的俩由。不是我們平常請(qǐng)求-響應(yīng)的同步模型毒嫡。事件驅(qū)動(dòng)的系統(tǒng)通過push而不是pull來處理,生產(chǎn)者在有消息時(shí)才推送消息給消費(fèi)者幻梯,而不是通過一種浪費(fèi)資源方式:讓 消費(fèi)者不斷地輪詢或等待數(shù)據(jù)兜畸。基于這個(gè)機(jī)制相對(duì)高的吞吐量和實(shí)時(shí)響應(yīng)也是響應(yīng)式的特點(diǎn)碘梢。事件驅(qū)動(dòng)由于Publisher只用關(guān)心數(shù)據(jù)源咬摇,Consumer只用關(guān)心
對(duì)處理結(jié)果的消費(fèi)。完全是松耦合的煞躬。這就給我們很大的操作空間來定制化我們的邏輯組合肛鹏,從而使異步代碼更一睹和可維護(hù)逸邦。

Reactor簡介

Reactor 3框架是Pivotal(Spring 母公司)基于Reactive Programming思想實(shí)現(xiàn)的。它實(shí)現(xiàn)了Reactive Streams(該規(guī)范由 Netflix在扰、TypeSafe缕减、Pivotal等公司發(fā)起的響應(yīng)式規(guī)范)。其他諸如RxJava 2, Akka Streams, Vert.x和Ratpack也都實(shí)現(xiàn)了該規(guī)范健田。
Reactor有一個(gè)很重要概念的就是backpressure烛卧。 由于生產(chǎn)者消費(fèi)者處理數(shù)據(jù)的能力不對(duì)等佛纫,很容易產(chǎn)生下游消費(fèi)能力過載的問題妓局。這就需要一個(gè)backpressure處理,來告訴上游生產(chǎn)者避免過載呈宇。打個(gè)比方好爬,一個(gè)人負(fù)責(zé)放水,一個(gè)人負(fù)責(zé)接水甥啄,如果放水的速度太快存炮,水桶勢必會(huì)濺出來,接水的人會(huì)根據(jù)情況來告訴放水的人什么速度最合適蜈漓,并且在快滿的時(shí)候告知放水人關(guān)閉開關(guān)穆桂。
Reactor還添加了運(yùn)算符的概念,這些運(yùn)算符被鏈接在一起以描述在每個(gè)階段對(duì)數(shù)據(jù)應(yīng)用的處理融虽。應(yīng)用運(yùn)算符返回一個(gè)中間Publisher(實(shí)際上享完,它可以被認(rèn)為是上游運(yùn)算符的訂閱者和下游的發(fā)布者)。數(shù)據(jù)的最終歸納點(diǎn)是在最終Subscriber中(這里還定義了用戶角度的業(yè)務(wù)邏輯)有额。還拿放水舉例般又,如果我們放水不是為了單純放水而是造肥宅快樂水。這樣就不是一個(gè)人接水了巍佑,中間加入了原漿茴迁,下一個(gè)接的人接到了原漿勾兌水,那么這個(gè)人充當(dāng)了最開始的消費(fèi)者萤衰,但是注意他不是最終的消費(fèi)者堕义。他的下游還有加氣兒的。他下游的下游還有罐裝操作脆栋。到這里整個(gè)工藝才算告一段落倦卖。這里你也更能看清backpressure(背壓)操作的作用,可能開始是大桶筹吐,到罐裝流程開始小瓶子了糖耸。通過背壓來控制出水的速率。

最上面揭示了一個(gè)最小單元的Reactor流程丘薛,源Publisher產(chǎn)生數(shù)據(jù)嘉竟。但默認(rèn)情況下,它只有Subscriber在注冊(訂閱)之后才會(huì)把數(shù)據(jù)推送給Subscriber執(zhí)行運(yùn)算符操作,中間可能伴隨者背壓處理舍扰。其實(shí)這些概念更重要的是理解它們倦蚪。理解了Reactor的特性才能為后面更好的學(xué)習(xí)java響應(yīng)式編程打好基礎(chǔ)。
關(guān)注公眾號(hào):碼農(nóng)小胖哥边苹,獲取更多資訊

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陵且,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子个束,更是在濱河造成了極大的恐慌慕购,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,635評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件茬底,死亡現(xiàn)場離奇詭異沪悲,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)阱表,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,543評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門殿如,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人最爬,你說我怎么就攤上這事涉馁。” “怎么了爱致?”我有些...
    開封第一講書人閱讀 168,083評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵烤送,是天一觀的道長。 經(jīng)常有香客問我蒜鸡,道長胯努,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,640評(píng)論 1 296
  • 正文 為了忘掉前任逢防,我火速辦了婚禮叶沛,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘忘朝。我一直安慰自己灰署,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,640評(píng)論 6 397
  • 文/花漫 我一把揭開白布局嘁。 她就那樣靜靜地躺著溉箕,像睡著了一般。 火紅的嫁衣襯著肌膚如雪悦昵。 梳的紋絲不亂的頭發(fā)上肴茄,一...
    開封第一講書人閱讀 52,262評(píng)論 1 308
  • 那天,我揣著相機(jī)與錄音但指,去河邊找鬼寡痰。 笑死抗楔,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的拦坠。 我是一名探鬼主播连躏,決...
    沈念sama閱讀 40,833評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贞滨!你這毒婦竟也來了入热?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,736評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤晓铆,失蹤者是張志新(化名)和其女友劉穎勺良,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體尤蒿,經(jīng)...
    沈念sama閱讀 46,280評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡郑气,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,369評(píng)論 3 340
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了腰池。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,503評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡忙芒,死狀恐怖示弓,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情呵萨,我是刑警寧澤奏属,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站潮峦,受9級(jí)特大地震影響囱皿,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜忱嘹,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,870評(píng)論 3 333
  • 文/蒙蒙 一嘱腥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拘悦,春花似錦齿兔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,340評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至屁桑,卻和暖如春医寿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背蘑斧。 一陣腳步聲響...
    開封第一講書人閱讀 33,460評(píng)論 1 272
  • 我被黑心中介騙來泰國打工靖秩, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留艾帐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,909評(píng)論 3 376
  • 正文 我出身青樓盆偿,卻偏偏與公主長得像柒爸,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子事扭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,512評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 響應(yīng)式編程 本文是對(duì)Reactor官方文檔Introduction to Reactive Programming...
    疊最厚的甲閱讀 4,837評(píng)論 0 2
  • 反應(yīng)式編程(Reactive Programming)這種新的編程范式越來越受到開發(fā)人員的歡迎捎稚。在 Java 社區(qū)...
    feiniao123閱讀 6,796評(píng)論 0 6
  • RxJava RxJava是響應(yīng)式程序設(shè)計(jì)的一種實(shí)現(xiàn)。在響應(yīng)式程序設(shè)計(jì)中求橄,當(dāng)數(shù)據(jù)到達(dá)的時(shí)候今野,消費(fèi)者做出響應(yīng)。響應(yīng)式...
    Mr槑閱讀 952評(píng)論 0 5
  • 在人生的路上負(fù)重前行 天影 不知道是從什么時(shí)候開始罐农,我們習(xí)慣了一勞永逸条霜,習(xí)慣了一步到位。我們不再看重過程涵亏,我們只想...
    吳超奇閱讀 465評(píng)論 0 0
  • 現(xiàn)在有一篇文章宰睡,《我為什么不體檢》,在網(wǎng)上挺流行气筋,說明支持其觀點(diǎn)的人還很多拆内。大頭醫(yī)生仔細(xì)拜讀了此篇大作后感覺這篇文...
    0bbc34a8d52e閱讀 1,113評(píng)論 1 3