面試官:講講@LoadBalance注解原理

一、運(yùn)行流程

  • 服務(wù)注冊(cè)與發(fā)現(xiàn): 在Spring Cloud微服務(wù)架構(gòu)中,服務(wù)實(shí)例通常會(huì)注冊(cè)到服務(wù)注冊(cè)中心(如Eureka, Consul, Zookeeper等)。這些服務(wù)實(shí)例的信息包括服務(wù)名、主機(jī)名、端口號(hào)等脖岛。

  • 集成Ribbon: Spring Cloud內(nèi)部集成了Netflix Ribbon來(lái)實(shí)現(xiàn)客戶端負(fù)載均衡。Ribbon是一個(gè)客戶端負(fù)載均衡工具颊亮,它可以根據(jù)某種負(fù)載均衡策略(如輪詢柴梆、隨機(jī)等)從一系列服務(wù)實(shí)例中選擇一個(gè)來(lái)發(fā)起調(diào)用。

  • RestTemplate的定制: 當(dāng)你在RestTemplate上使用@LoadBalanced注解時(shí)终惑,Spring Cloud會(huì)創(chuàng)建一個(gè)特殊的RestTemplate實(shí)例绍在。這個(gè)實(shí)例被自定義為攔截請(qǐng)求,并利用Ribbon來(lái)選擇服務(wù)實(shí)例雹有。

  • 請(qǐng)求攔截: 當(dāng)你使用這個(gè)定制的RestTemplate發(fā)起請(qǐng)求時(shí)偿渡,請(qǐng)求會(huì)被攔截。如果請(qǐng)求的URL使用了服務(wù)名(如http://service-name/path)霸奕,Ribbon會(huì)從服務(wù)注冊(cè)中心獲取該服務(wù)名下的所有可用實(shí)例溜宽。

  • 選擇服務(wù)實(shí)例: Ribbon根據(jù)配置的負(fù)載均衡策略從這些實(shí)例中選擇一個(gè),并將服務(wù)名替換為實(shí)際的主機(jī)名和端口號(hào)质帅,完成服務(wù)實(shí)例的選擇适揉。

  • 發(fā)起實(shí)際調(diào)用: 替換后的URL(現(xiàn)在包含具體的主機(jī)名和端口號(hào))用于實(shí)際的HTTP調(diào)用留攒。

  • 二、注解原理

    原理:RestTemplate嫉嘀、WebClient炼邀、Feign等HTTP客戶端會(huì)被容器注入一個(gè)LoadBalancerInterceptor攔截器,從而使它們具有負(fù)載均衡的能力吃沪。攔截器在請(qǐng)求之前根據(jù)具體的負(fù)載策略對(duì)請(qǐng)求的地址進(jìn)行替換汤善,然后再去調(diào)用。

    三票彪、源碼分析

  • LoadBalance注解定義
  • 在spring-cloud-common.jar 的類LoadBalancerAutoConfiguration中維護(hù)了一個(gè)loadbalance的restTemplate列表。
  • 從類LoadBalancerAutoConfiguration中的LoadBalancerInterceptorConfig內(nèi)部靜態(tài)類我們可以看到LoadBalancerInterceptor類用于做攔截 不狮,類RestTemplateCustomizer用來(lái)添加攔截器降铸。
  • 攔截器的代碼是在 LoadBalancerInterceptor類的intercept方法中,執(zhí)行交給了LoadBalanceClient摇零,通過(guò)LoadBalancerRequestFactory來(lái)構(gòu)建一個(gè)LoadBalancerRequest對(duì)象推掸。this.requestFactory.createRequest方法通過(guò)ServiceRequestWrapper來(lái)執(zhí)行替換URL的邏輯。ServiceRequestWrapper中將URL的獲取交給了LoadBalancerClient的reconstructURI方法驻仅。

    ?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
    • 序言:七十年代末谅畅,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子噪服,更是在濱河造成了極大的恐慌毡泻,老刑警劉巖,帶你破解...
      沈念sama閱讀 219,539評(píng)論 6 508
    • 序言:濱河連續(xù)發(fā)生了三起死亡事件粘优,死亡現(xiàn)場(chǎng)離奇詭異仇味,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)雹顺,發(fā)現(xiàn)死者居然都...
      沈念sama閱讀 93,594評(píng)論 3 396
    • 文/潘曉璐 我一進(jìn)店門丹墨,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人嬉愧,你說(shuō)我怎么就攤上這事贩挣。” “怎么了没酣?”我有些...
      開封第一講書人閱讀 165,871評(píng)論 0 356
    • 文/不壞的土叔 我叫張陵王财,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我四康,道長(zhǎng)搪搏,這世上最難降的妖魔是什么? 我笑而不...
      開封第一講書人閱讀 58,963評(píng)論 1 295
    • 正文 為了忘掉前任闪金,我火速辦了婚禮疯溺,結(jié)果婚禮上论颅,老公的妹妹穿的比我還像新娘。我一直安慰自己囱嫩,他們只是感情好恃疯,可當(dāng)我...
      茶點(diǎn)故事閱讀 67,984評(píng)論 6 393
    • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著墨闲,像睡著了一般今妄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鸳碧,一...
      開封第一講書人閱讀 51,763評(píng)論 1 307
    • 那天怀喉,我揣著相機(jī)與錄音,去河邊找鬼隶债。 笑死临谱,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的套利。 我是一名探鬼主播推励,決...
      沈念sama閱讀 40,468評(píng)論 3 420
    • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼肉迫!你這毒婦竟也來(lái)了验辞?” 一聲冷哼從身側(cè)響起,我...
      開封第一講書人閱讀 39,357評(píng)論 0 276
    • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤喊衫,失蹤者是張志新(化名)和其女友劉穎跌造,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體格侯,經(jīng)...
      沈念sama閱讀 45,850評(píng)論 1 317
    • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鼻听,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
      茶點(diǎn)故事閱讀 38,002評(píng)論 3 338
    • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了联四。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撑碴。...
      茶點(diǎn)故事閱讀 40,144評(píng)論 1 351
    • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖朝墩,靈堂內(nèi)的尸體忽然破棺而出醉拓,到底是詐尸還是另有隱情,我是刑警寧澤收苏,帶...
      沈念sama閱讀 35,823評(píng)論 5 346
    • 正文 年R本政府宣布亿卤,位于F島的核電站,受9級(jí)特大地震影響鹿霸,放射性物質(zhì)發(fā)生泄漏排吴。R本人自食惡果不足惜,卻給世界環(huán)境...
      茶點(diǎn)故事閱讀 41,483評(píng)論 3 331
    • 文/蒙蒙 一懦鼠、第九天 我趴在偏房一處隱蔽的房頂上張望钻哩。 院中可真熱鬧屹堰,春花似錦、人聲如沸街氢。這莊子的主人今日做“春日...
      開封第一講書人閱讀 32,026評(píng)論 0 22
    • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)珊肃。三九已至荣刑,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伦乔,已是汗流浹背厉亏。 一陣腳步聲響...
      開封第一講書人閱讀 33,150評(píng)論 1 272
    • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烈和,地道東北人叶堆。 一個(gè)月前我還...
      沈念sama閱讀 48,415評(píng)論 3 373
    • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像斥杜,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子沥匈,可洞房花燭夜當(dāng)晚...
      茶點(diǎn)故事閱讀 45,092評(píng)論 2 355

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