關(guān)于回調(diào)函數(shù)和分布式消息隊(duì)列的認(rèn)識(shí)

? ? 回調(diào),在平時(shí)工作中經(jīng)常能夠聽(tīng)到玫膀。字面意思就是矛缨,我調(diào)用某對(duì)象的某項(xiàng)服務(wù),然后等到將來(lái)的某個(gè)時(shí)機(jī)帖旨,被調(diào)用對(duì)象返回我想要的數(shù)據(jù)箕昭。其實(shí),從字面上這樣理解就可以大致知道什么意思了解阅,但是這里的我調(diào)用對(duì)象的某項(xiàng)服務(wù)換成我向某個(gè)對(duì)象注冊(cè)一個(gè)感興趣的事件更為合適落竹。

? ?在java里面有很多例子,最典型的就是PubSub模型货抄,也就是設(shè)計(jì)模式中的觀察者模式述召,首先很多客戶向Publisher訂閱消息,也就是把自己的reference給Publisher蟹地,然后Publisher觸發(fā)事件后遍歷一個(gè)集合积暖,然后調(diào)用對(duì)應(yīng)的方法,這樣只要向Publisher注冊(cè)的對(duì)象都會(huì)收到消息怪与。從上面我們可以看出回調(diào)是事件觸發(fā)的夺刑,事件觸發(fā)一般意味著異步。

? ?那么回調(diào)到底解決了什么問(wèn)題呢分别?

比如說(shuō)我們想知道有沒(méi)有人去點(diǎn)某個(gè)按鈕遍愿,如果不異步通信,那么就只能沒(méi)隔一段時(shí)間去問(wèn)一下茎杂,這種輪詢其實(shí)并沒(méi)有做什么有意義的事情错览,卻占用著cpu資源。如果煌往,異步的話倾哺,我只要向那個(gè)按鈕注冊(cè)一個(gè)點(diǎn)擊事件轧邪,然后告訴我這個(gè)回調(diào)函數(shù),那么我就可以做其他事情了羞海,這樣效率也就提高了忌愚。

但是異步比起同步就難多了,因?yàn)槿绻惒降娜プ鋈吹耍话愣际嵌嗑€程編程硕糊,多線程編程中安全性和數(shù)據(jù)的一致性是一個(gè)值得關(guān)注的點(diǎn),還有一點(diǎn)就是腊徙,我雖然注冊(cè)了某項(xiàng)服務(wù)简十,但是我并不知道什么時(shí)候他給我,所以這就要進(jìn)行合理的設(shè)計(jì)撬腾,比如說(shuō)螟蝙,我注冊(cè)了某個(gè)服務(wù)后,不是立即去用回調(diào)返回的數(shù)據(jù)民傻,而是先去處理其他的一些業(yè)務(wù)邏輯胰默,然后再處理這個(gè)回調(diào)數(shù)據(jù),這樣異步的作用就體現(xiàn)出來(lái)了漓踢,也不會(huì)阻塞牵署,如果我注冊(cè)之后立即調(diào)用那么會(huì)出現(xiàn)被調(diào)用方?jīng)]有準(zhǔn)備好,因此我這邊會(huì)阻塞喧半,不阻塞沒(méi)有辦法奴迅,因?yàn)橄胍臄?shù)據(jù)沒(méi)有,雖然一些編程語(yǔ)言也提供設(shè)置等待超時(shí)時(shí)間薯酝,但是這樣就違背設(shè)計(jì)的初衷了半沽,如果不合適就別這樣設(shè)計(jì)。

? ?在之前的公司吴菠,我用到過(guò)一個(gè)分布式消息隊(duì)列,rabbitmq,解決的問(wèn)題是分布式的PubSub的問(wèn)題浩村,而且功能很多礼烈,可以支持消息的持久化腮恩。解決了分布式通信的問(wèn)題,可靠性,吞吐量都還可以常柄。其實(shí)把隊(duì)列設(shè)置成持久化之后,吞吐量大概會(huì)下降10被荠锭,畢竟需要io操作把消息持久化堤魁,等到subscriber收到消息后,給rabbitmq發(fā)送一個(gè)ack铐姚,mq才把持久化的消息給刪除策肝。

? ? 之前用akka肛捍,一個(gè)akka系統(tǒng)由許多個(gè)actor組成,actor是最小單元而且actor之間的通信都是異步的之众。actor之間的通信又兩種拙毫,一種是one to one,這種one to one和面向?qū)ο笾械囊粋€(gè)對(duì)象調(diào)用另一個(gè)對(duì)象不同棺禾,面向?qū)ο缶幊趟枷胫凶禾悖瑢?duì)象的調(diào)用一般都是同步的,除非來(lái)一個(gè)新的線程異步的去做膘婶。另一種是one to many 缺前,actor system中有個(gè)總線,類似于計(jì)算機(jī)中的總線悬襟,每次我發(fā)送消息的時(shí)候衅码,我會(huì)向總線中publish這個(gè)message,然后其他actor可以先向總線中注冊(cè)以及感興趣的消息古胆,因?yàn)槿绻簧婕暗郊旱脑捤衋ctor都是在一個(gè)系統(tǒng)中的肆良,所以是可行的∫菀铮可以看出one to many也是PubSub模型惹恃。也是異步通信或者分布式通信的主要方法。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末棺牧,一起剝皮案震驚了整個(gè)濱河市巫糙,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌颊乘,老刑警劉巖参淹,帶你破解...
    沈念sama閱讀 222,104評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異乏悄,居然都是意外死亡浙值,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,816評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門檩小,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)开呐,“玉大人,你說(shuō)我怎么就攤上這事规求】鸶叮” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 168,697評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵阻肿,是天一觀的道長(zhǎng)瓦戚。 經(jīng)常有香客問(wèn)我,道長(zhǎng)丛塌,這世上最難降的妖魔是什么较解? 我笑而不...
    開(kāi)封第一講書人閱讀 59,836評(píng)論 1 298
  • 正文 為了忘掉前任畜疾,我火速辦了婚禮,結(jié)果婚禮上哨坪,老公的妹妹穿的比我還像新娘庸疾。我一直安慰自己,他們只是感情好当编,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,851評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布届慈。 她就那樣靜靜地躺著,像睡著了一般忿偷。 火紅的嫁衣襯著肌膚如雪金顿。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 52,441評(píng)論 1 310
  • 那天鲤桥,我揣著相機(jī)與錄音揍拆,去河邊找鬼。 笑死茶凳,一個(gè)胖子當(dāng)著我的面吹牛嫂拴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播贮喧,決...
    沈念sama閱讀 40,992評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼筒狠,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了箱沦?” 一聲冷哼從身側(cè)響起辩恼,我...
    開(kāi)封第一講書人閱讀 39,899評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎谓形,沒(méi)想到半個(gè)月后灶伊,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,457評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡寒跳,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,529評(píng)論 3 341
  • 正文 我和宋清朗相戀三年聘萨,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片童太。...
    茶點(diǎn)故事閱讀 40,664評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡匈挖,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出康愤,到底是詐尸還是另有隱情,我是刑警寧澤舶吗,帶...
    沈念sama閱讀 36,346評(píng)論 5 350
  • 正文 年R本政府宣布征冷,位于F島的核電站,受9級(jí)特大地震影響誓琼,放射性物質(zhì)發(fā)生泄漏检激。R本人自食惡果不足惜肴捉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,025評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望叔收。 院中可真熱鬧齿穗,春花似錦、人聲如沸饺律。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 32,511評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)复濒。三九已至脖卖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間巧颈,已是汗流浹背畦木。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 33,611評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留砸泛,地道東北人十籍。 一個(gè)月前我還...
    沈念sama閱讀 49,081評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像唇礁,于是被迫代替她去往敵國(guó)和親勾栗。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,675評(píng)論 2 359

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

  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理垒迂,服務(wù)發(fā)現(xiàn)械姻,斷路器,智...
    卡卡羅2017閱讀 134,707評(píng)論 18 139
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,304評(píng)論 25 707
  • 本文依照 知識(shí)共享許可協(xié)議(署名-非商業(yè)性使用-禁止演繹) 發(fā)布机断。感謝@嚴(yán)禁扯淡 的修改建議楷拳。 2017-2-9:...
    半枚荔枝閱讀 5,223評(píng)論 0 16
  • 1 消息隊(duì)列概述 消息隊(duì)列中間件是分布式系統(tǒng)中重要的組件,主要解決應(yīng)用耦合吏奸,異步消息欢揖,流量削鋒等問(wèn)題。實(shí)現(xiàn)高性能奋蔚,...
    Bobby0322閱讀 10,878評(píng)論 0 24
  • 相似的人適合一起風(fēng)花雪月她混,互補(bǔ)的人才適合一起慢慢變老。所以泊碑,有時(shí)候你覺(jué)得那么相近的兩個(gè)人卻沒(méi)有好結(jié)果坤按,好遺憾。但生...
    bbe46d465c03閱讀 216評(píng)論 0 1