精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Dubbo 配置 Loadbalance 不生效?擼一把源碼

開(kāi)發(fā) 前端
很久之前我給業(yè)務(wù)方寫(xiě)了一個(gè) dubbo loadbalance 的擴(kuò)展(為了敘述方便,這個(gè) loadbalance 擴(kuò)展就叫它 XLB 吧),這兩天業(yè)務(wù)方反饋說(shuō) XLB 不生效了。

[[432923]]

文末本文轉(zhuǎn)載自微信公眾號(hào)「捉蟲(chóng)大師」,作者捉蟲(chóng)大師 。轉(zhuǎn)載本文請(qǐng)聯(lián)系捉蟲(chóng)大師公眾號(hào)。

背景

很久之前我給業(yè)務(wù)方寫(xiě)了一個(gè) dubbo loadbalance 的擴(kuò)展(為了敘述方便,這個(gè) loadbalance 擴(kuò)展就叫它 XLB 吧),這兩天業(yè)務(wù)方反饋說(shuō) XLB 不生效了

我心想,不可能啊,都用了大半年了~

排查

于是我登上不生效的 consumer 機(jī)器進(jìn)行排查,還好我留了一手,當(dāng) XLB 加載時(shí),會(huì)打印一行日志

看了下這個(gè)服務(wù),并沒(méi)有打印日志,說(shuō)明 XLB 并沒(méi)有加載成功

于是,我就去問(wèn)對(duì)應(yīng)的開(kāi)發(fā),有按照我的文檔配置 loadbalance 嗎?答復(fù):完全按照文檔配置

這下我就有點(diǎn)不相信了,但轉(zhuǎn)念一想,配置 loadbalance 如此簡(jiǎn)單,不應(yīng)該出錯(cuò)啊,我的文檔和他的應(yīng)用都在 xml 文件中配置了 consumer 的 loadbalance

  1. <dubbo:consumer loadbalance="xlb"/> 

抱著試一試的態(tài)度,拉取了他們項(xiàng)目的代碼,發(fā)現(xiàn)配置確實(shí)如上,但我發(fā)現(xiàn)他們的 application.properties 配置文件也配了一個(gè) consumer 的屬性

  1. dubbo.consumer.check=false 

以多年和 dubbo 打交道的經(jīng)驗(yàn)來(lái)說(shuō),這里有問(wèn)題,又確認(rèn)了代碼,確實(shí) xml 和 application.properties 都加載了

那這里可能就有問(wèn)題了,dubbo 從 xml 加載生成了一個(gè) consumer 配置,dubbo-springboot-starter 又從 application.properties 加載配置生成了一個(gè) consumer 配置,這不就沖突了?

別看只配置了 dubbo.consumer.check,它實(shí)際上會(huì)生成一個(gè)完整的 consumer 配置,只不過(guò) loadbalance 為默認(rèn)值

業(yè)務(wù)方為什么會(huì)這樣配置?大概率是因?yàn)槲业奈臋n里只給出了 xml 形式的配置,沒(méi)有給 spring-boot 配置,他們?cè)仁褂玫氖?spring-boot 的配置方式,然后看到我的文檔是 xml,結(jié)果就不會(huì)配置了,也寫(xiě)了個(gè) xml,和原先的配置沖突

驗(yàn)證

為了驗(yàn)證是這個(gè)問(wèn)題導(dǎo)致,我把他的 application.properties 的 dubbo.consumer.check 配置挪到了 xml 文件中,果然重啟后就加載到了 XLB

隨后我又在本地的測(cè)試應(yīng)用上做了這樣一個(gè)驗(yàn)證:

  1. <!-- case 1 --> 
  2. <dubbo:consumer /> 
  3. <dubbo:consumer loadbalance="xlb"/> 
  4.  
  5. <!-- case 2 --> 
  6. <dubbo:consumer loadbalance="xlb"/> 
  7. <dubbo:consumer /> 

兩組配置相同,但順序不同,測(cè)試結(jié)果為 case 1 可以加載到 XLB,case 2 不行

于是猜測(cè),dubbo consumer 配置以后加載的為準(zhǔn)

擼源碼

顯然猜測(cè)不符合我的風(fēng)格,下面開(kāi)擼源碼,不感興趣可以劃過(guò),最下面有總結(jié)

首先搞清楚,何時(shí)會(huì)加載 loadbalance,在 AbstractClusterInvoker 的 invoke 方法中,加載了 loadbalance

  1. @Override 
  2. public Result invoke(final Invocation invocation) throws RpcException { 
  3.     ... 
  4.     List<Invoker<T>> invokers = list(invocation); 
  5.     LoadBalance loadbalance = initLoadBalance(invokers, invocation); 
  6.     RpcUtils.attachInvocationIdIfAsync(getUrl(), invocation); 
  7.     return doInvoke(invocation, invokers, loadbalance); 

加載代碼如下

  1. protected LoadBalance initLoadBalance(List<Invoker<T>> invokers, Invocation invocation) { 
  2.     if (CollectionUtils.isNotEmpty(invokers)) { 
  3.         return ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(invokers.get(0).getUrl() 
  4.                 .getMethodParameter(RpcUtils.getMethodName(invocation), LOADBALANCE_KEY, DEFAULT_LOADBALANCE)); 
  5.     } else { 
  6.         return ExtensionLoader.getExtensionLoader(LoadBalance.class).getExtension(DEFAULT_LOADBALANCE); 
  7.     } 

帶緩存的加載擴(kuò)展

  1. public T getExtension(String name) { 
  2.     if (StringUtils.isEmpty(name)) { 
  3.         throw new IllegalArgumentException("Extension name == null"); 
  4.     } 
  5.     if ("true".equals(name)) { 
  6.         return getDefaultExtension(); 
  7.     } 
  8.     final Holder<Object> holder = getOrCreateHolder(name); 
  9.     Object instance = holder.get(); 
  10.     if (instance == null) { 
  11.         synchronized (holder) { 
  12.             instance = holder.get(); 
  13.             if (instance == null) { 
  14.                 instance = createExtension(name); 
  15.                 holder.set(instance); 
  16.             } 
  17.         } 
  18.     } 
  19.     return (T) instance; 

可以看出

  • loadbalance 是發(fā)起 dubbo 調(diào)用時(shí),且當(dāng) invokers 非空時(shí)(即 providers 非空)會(huì)被初始化,后續(xù)都從緩存中取
  • loadbalance 是根據(jù)第一個(gè) invoker 的 loadbalance 參數(shù)決定使用哪個(gè) loadbalance 的

于是問(wèn)題轉(zhuǎn)移到 invoker 的 loadbalance 從哪來(lái)?provider 不會(huì)配置 loadbalance,所以這個(gè)參數(shù)一定是從 consumer 的配置上得到的

順藤摸瓜,在 RegistryDirectory 的 toInvokers 方法中調(diào)用了 mergeUrl,它是在注冊(cè)中心通知時(shí)被調(diào)用,也就是從注冊(cè)中心上拿到 provider url 時(shí),還得 merge 一下才能用,merge 了些什么內(nèi)容?

  1. private URL mergeUrl(URL providerUrl) { 
  2.     // 1. merge consumer 參數(shù) 
  3.     providerUrl = ClusterUtils.mergeUrl(providerUrl, queryMap);  
  4.     // 2. merge configurator 參數(shù) 
  5.     providerUrl = overrideWithConfigurator(providerUrl); 
  6.     ... 
  7.     return providerUrl; 

1中 merge 了queryMap 里的參數(shù),這個(gè)queryMap 其實(shí)就是 consumer 的參數(shù),它來(lái)自配置的 reference

再看 reference 配置,當(dāng) ReferenceConfig 初始化時(shí)

  1. public synchronized void init() { 
  2.     ... 
  3.     checkAndUpdateSubConfigs(); 
  4.     ... 
  5.     AbstractConfig.appendParameters(map, consumer); 
  6.     ... 
  7.  
  8. // 2 
  9. public void checkAndUpdateSubConfigs() { 
  10.     ... 
  11.     checkDefault(); 
  12.     ... 
  13.  
  14. // 3 
  15. public void checkDefault() throws IllegalStateException { 
  16.     if (consumer == null) { 
  17.         consumer = ApplicationModel.getConfigManager() 
  18.                 .getDefaultConsumer() 
  19.                 .orElse(new ConsumerConfig()); 
  20.     } 
  21.  
  22. // 4 
  23. public Optional<ConsumerConfig> getDefaultConsumer() { 
  24.     List<ConsumerConfig> consumerConfigs = getDefaultConfigs(getConfigsMap(getTagName(ConsumerConfig.class))); 
  25.     if (CollectionUtils.isNotEmpty(consumerConfigs)) { 
  26.         return Optional.of(consumerConfigs.get(0)); 
  27.     } 
  28.     return Optional.empty(); 

上面調(diào)用鏈從 1 到 4,4 中獲取了第1個(gè) consumer,這就是我們要找的根源

總結(jié)

每配置一個(gè) consumer ,無(wú)論是從 xml 文件,或是 spring-boot 配置,或是 api 直接創(chuàng)建,都會(huì)生成一個(gè) consumerConfig 對(duì)象

當(dāng)消費(fèi)接口,即配置 reference 時(shí),會(huì)將 consumer 的參數(shù) merge 過(guò)來(lái),如果存在多個(gè) consumer,會(huì)挑第一個(gè),當(dāng)然我們并不知道誰(shuí)先加載

當(dāng) reference 存在 consumer 的配置時(shí),注冊(cè)中心通知的 provider urls 會(huì)和 reference 的參數(shù)進(jìn)行合并,合并后生成可調(diào)用的 invoker

 

 

 

對(duì)于 loadbalance 來(lái)說(shuō),調(diào)用時(shí),如果 invokers 非空,則會(huì)嘗試通過(guò)第一個(gè) invoker 的 loadbalance 參數(shù)加載負(fù)載均衡算法,第一次調(diào)用進(jìn)行加載,后續(xù)調(diào)用則使用緩存

 

責(zé)任編輯:武曉燕 來(lái)源: 捉蟲(chóng)大師
相關(guān)推薦

2020-03-02 17:04:47

戴爾

2023-06-21 08:24:46

2024-01-04 14:16:05

騰訊紅黑樹(shù)Socket

2011-11-08 08:14:40

WLANWi-Fi

2011-05-04 17:11:12

打印機(jī)

2022-10-25 15:25:22

網(wǎng)關(guān)并行Flowable

2019-06-12 15:20:25

Redis高性能線程

2017-06-14 17:39:40

微服務(wù)架構(gòu)服務(wù)器

2010-10-28 08:43:07

App StoreSymbian

2024-02-22 17:08:03

騰訊架構(gòu)RocketMQ

2009-02-23 19:07:14

SaaS800APP八百客

2024-04-18 08:00:23

openInula?React響應(yīng)式 API

2018-03-23 08:26:44

Hadoop集群SQL

2021-08-18 23:10:56

setState代碼性能

2022-07-20 08:55:02

區(qū)塊鏈技術(shù)數(shù)據(jù)記錄

2011-04-08 15:28:48

2021-06-03 08:01:12

JVM性能優(yōu)化

2019-10-30 05:51:07

物聯(lián)網(wǎng)設(shè)備物聯(lián)網(wǎng)安全物聯(lián)網(wǎng)

2014-11-26 15:05:16

魅族MX4Pro

2011-04-08 15:15:34

策略路由
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

亚洲国产成人在线播放| 亚洲成人免费av| 国产在线精品播放| 久久精品这里只有精品| 日韩大片在线免费观看| 欧美在线一区二区三区| 2021狠狠干| 色天堂在线视频| 精品一二三四在线| 26uuu国产精品视频| 日本伦理一区二区三区| 青青草这里只有精品| 欧美网站大全在线观看| 日韩xxxx视频| 欧美18hd| 91丝袜美腿高跟国产极品老师 | 性欧美18~19sex高清播放| 国产精品色一区二区三区| 成人xxxxx色| 中文字幕日韩三级| 国产精品夜夜夜| 另类色图亚洲色图| 亚洲成人黄色av| 韩国精品福利一区二区三区| 欧美高清一级片在线| 18禁男女爽爽爽午夜网站免费| 99自拍视频在线观看| 日本一区二区三区四区| 久久av二区| 亚洲国产成人精品一区二区三区| 久久av资源网| 国产精品久久久久国产a级| 国产无遮挡又黄又爽| 911久久香蕉国产线看观看| 亚洲欧洲av一区二区| 欧产日产国产精品98| 精品一级视频| 欧美日韩亚洲综合| 国产精品无码一本二本三本色| 成全电影大全在线观看| 亚洲欧美日韩国产一区二区三区| 少妇特黄a一区二区三区| 污视频网站免费观看| 懂色av一区二区在线播放| 亚洲xxxx做受欧美| 国产麻豆精品一区| 久久99精品久久久久久| 国产日韩欧美成人| 在线观看日韩一区二区| 久久国产视频网| 国产精品偷伦一区二区| 丰满人妻一区二区三区四区| 美日韩精品视频| 97在线视频一区| 日产精品久久久久| 亚洲美女网站| 欧美亚洲另类视频| 三级视频在线观看| 亚洲综合激情| 国产成人中文字幕| 中文字幕久久久久| 捆绑紧缚一区二区三区视频| 国产精选久久久久久| 国产一区二区麻豆| 国产一区在线精品| av蓝导航精品导航| 性中国古装videossex| 国产河南妇女毛片精品久久久| 亚洲最大av网| 黄色一级大片在线免费看国产| 国产精品一区免费在线观看| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 日韩av女优在线观看| 99精品国产在热久久| 日本国产一区二区三区| 中文字幕一区二区三区人妻四季 | 国产成人精品在线播放| 久久人人爽人人爽人人片av免费| 免费观看成人av| 成人欧美在线观看| 狠狠躁日日躁夜夜躁av| 久久亚洲一级片| 亚洲欧美日韩另类精品一区二区三区 | 国产在线视频你懂的| 国产农村妇女精品一区二区| 国产精品国产三级国产aⅴ9色| 亚洲综合精品国产一区二区三区| 国产美女久久久久| 精品在线一区| 在线观看免费高清完整| 一级精品视频在线观看宜春院| www一区二区www免费| 国产91欧美| 精品国产一区二区亚洲人成毛片| 色婷婷av777| 一区二区三区网站| 欧美亚洲成人精品| 97免费观看视频| 91网址在线看| 国产精品8888| 四虎4545www精品视频| 欧美一区二区免费| 欧美日韩高清丝袜| 国产精品www994| 国产精品久久久久高潮| 欧美77777| 国产精品不卡在线观看| 黄色片网址在线观看| 成人四虎影院| 亚洲精品美女久久久久| 免费高清在线观看电视| 久久天天综合| 国产a一区二区| 日韩精品成人av| 色综合夜色一区| 韩国av中国字幕| 日韩在线观看电影完整版高清免费悬疑悬疑 | 丰满大乳奶做爰ⅹxx视频| 999久久久精品国产| 欧美在线视频观看| 丰满人妻一区二区三区无码av| 国产精品久久久久久久久快鸭| 日韩激情免费视频| 黑人久久a级毛片免费观看| 日韩亚洲欧美中文在线| 波多野结衣家庭主妇| av一区二区三区黑人| 欧美大片免费播放| 亚洲男人在线| 夜夜嗨av一区二区三区免费区| 欧美日韩综合在线观看| 成人免费视频caoporn| 天天操天天干天天玩| 国产福利亚洲| 夜夜嗨av一区二区三区免费区| 日本中文字幕第一页| 不卡一区二区三区四区| 又大又硬又爽免费视频| 蜜桃精品视频| 久久av在线看| 国产日韩欧美一区二区东京热| 中文字幕一区在线观看视频| 国产一二三四在线视频| 欧洲激情综合| 国产精品狼人色视频一区| 国产特黄在线| 欧美午夜视频网站| 呻吟揉丰满对白91乃国产区| 日韩电影在线观看网站| 西游记1978| 久久夜夜久久| 久久亚洲精品中文字幕冲田杏梨| 国产精品爽爽久久| 一区二区三区免费| 日本50路肥熟bbw| 亚洲日产国产精品| 久久久久久亚洲精品不卡4k岛国| 蜜桃视频在线观看免费视频| 日韩精品有码在线观看| 国产一级免费视频| 国产精品三级视频| 亚洲三级在线观看视频| 一区二区三区午夜视频| 99re国产视频| 9999热视频在线观看| 日韩www在线| 国产精品乱码一区二区视频| 国产精品久久久久永久免费观看 | 在线观看日本视频| 国产欧美综合在线| 成人黄色一级大片| 激情视频一区| 欧美国产一区二区在线| 欧美综合社区国产| 九九综合九九综合| 深夜福利视频一区| 欧美午夜精品久久久久久孕妇 | 国产精品青草久久久久福利99| 91高清在线视频| 日韩一区二区中文字幕| 精品在线播放视频| 国产精品国产三级国产普通话三级| 1314成人网| 亚洲深夜av| 日本黄色播放器| 国产精品视屏| 国产精品日本精品| 成人超碰在线| 色噜噜久久综合伊人一本| 性生活视频软件| 在线视频你懂得一区二区三区| 2018天天弄| 久久久久久久久久电影| 宇都宫紫苑在线播放| 久久精品人人做人人爽电影蜜月| eeuss中文| 亚洲国产欧美日韩在线观看第一区 | 亚洲 欧美 中文字幕| 亚洲人一二三区| av中文字幕免费观看| 国产一区二区不卡老阿姨| 久草在在线视频| 亚洲国产高清一区| 在线观看欧美一区| 精品一区毛片| 国产精品久久久久久久免费大片 | 国产欧美一区二区在线播放| 色婷婷成人网| 欧洲成人午夜免费大片| 污视频网站免费在线观看| 亚洲日本欧美中文幕| 亚洲精品综合久久| 欧美福利电影网| 午夜精品三级久久久有码| 亚洲美女在线国产| 国产亚洲精品久久久久久豆腐| aaa亚洲精品| 亚洲国产精品狼友在线观看| 麻豆91在线播放免费| 37pao成人国产永久免费视频| 欧美1级日本1级| 在线观看欧美亚洲| 日韩在线二区| 日本一区二区三区免费观看 | 亚洲欧美日韩精品综合在线观看 | 亚洲一一在线| 欧美禁忌电影| 久久久久久久久一区二区| 国产成人福利av| 国产精品视频免费在线| 国产韩日精品| 国产ts人妖一区二区三区| 在线观看爽视频| 97av在线影院| 女人高潮被爽到呻吟在线观看| 欧美国产高跟鞋裸体秀xxxhd| 成人在线影视| 欧美成人免费大片| 中文av资源在线| 欧美日本高清视频| av免费在线观| 欧美大尺度激情区在线播放| av中文字幕在线播放| 久久国产精品电影| 伊人精品影院| 欧美福利在线观看| 国产美女情趣调教h一区二区| 久久91精品国产| 欧美xxx黑人xxx水蜜桃| 欧美激情xxxxx| 2021中文字幕在线| 91高清视频免费观看| 北岛玲heyzo一区二区| 91高清免费视频| 亚洲www免费| 国产欧美日韩中文字幕在线| 欧美xxxx性| 91在线免费看网站| 91成人福利| 久久人人97超碰人人澡爱香蕉| 人人精品视频| 日韩国产精品一区二区| 久久婷婷蜜乳一本欲蜜臀| youjizz.com亚洲| 亚洲欧美伊人| 啊啊啊一区二区| 免费欧美在线视频| 永久免费黄色片| 成人一级片在线观看| 蜜臀av一区二区三区有限公司| 久久久另类综合| 人与动物性xxxx| 亚洲一区欧美一区| 一区二区三区福利视频| 欧美少妇bbb| 亚洲精华国产精华精华液网站| 亚洲精品电影在线观看| yourporn在线观看视频| 欧美另类暴力丝袜| 在线观看爽视频| 成人黄色av播放免费| 嗯用力啊快一点好舒服小柔久久| 麻豆91蜜桃| 91精品久久久久久久久久不卡| 17c丨国产丨精品视频| 久久亚洲一区| 一区二区在线免费观看视频| 91视频在线观看免费| 97成人资源站| 欧美日韩免费在线观看| 一区二区日韩在线观看| 亚洲精品一区二区三区香蕉| 国产女主播在线写真| 欧美激情在线观看| 欧美日韩女优| 国产精品一区二区三区免费观看 | 久久九九国产精品怡红院 | 88av在线播放| 中文字幕av一区二区三区| 国产亚洲小视频| 欧美天堂亚洲电影院在线播放| 成人乱码一区二区三区| 中文字幕日本欧美| 日产福利视频在线观看| 亚洲一区二区三区四区在线播放 | japanese在线播放| 日韩av中文字幕一区二区三区| 中文字幕第九页| 国产精品久久久久一区二区三区共| 青青国产在线观看| 欧美一区二区啪啪| 最新97超碰在线| 欧美孕妇与黑人孕交| av综合网址| 亚洲自拍偷拍一区二区三区| 日本中文一区二区三区| 极品粉嫩小仙女高潮喷水久久| 一区二区三区在线观看国产| 伊人亚洲综合网| 亚洲视频欧美视频| heyzo高清国产精品| 3d动漫精品啪啪一区二区三区免费| 国产精品一在线观看| 欧美一级视频免费看| 国产成人亚洲综合a∨婷婷图片| 精品在线观看一区| 欧美日韩你懂得| 国内av一区二区三区| 欧美在线www| 欧美日日夜夜| 国产特级淫片高清视频| 成熟亚洲日本毛茸茸凸凹| 日韩va亚洲va欧美va清高| 欧美日韩一级黄| av在线电影院| 国产精品久久久久免费a∨| 最新国产一区| 欧美性猛交久久久乱大交小说| 91一区二区三区在线观看| 日韩污视频在线观看| 亚洲精品一区在线观看| а√在线中文网新版地址在线| 国产女人水真多18毛片18精品| 国产精品magnet| 国产日韩视频一区| 亚洲第一激情av| 偷拍自拍在线视频| 69av在线播放| 免费不卡中文字幕在线| 人妻丰满熟妇av无码区app| 国产日本欧美一区二区| 免费在线不卡av| 久久精品这里热有精品| 欧美另类中文字幕| 欧美一级片免费播放| 成人av影院在线| 日韩精品一区二区亚洲av| 亚洲视频在线看| 日韩有码欧美| 久久久无码中文字幕久...| 成人国产视频在线观看| 日韩乱码人妻无码中文字幕| 亚洲欧美日韩精品久久奇米色影视| 免费污视频在线一区| eeuss中文| 99在线视频精品| 91青青草视频| 欧美成人免费视频| 美女一区二区在线观看| 亚洲少妇第一页| 亚洲美女在线一区| 午夜视频免费看| 国产精品久久久久久久久久免费 | 欧美黄色成人网| 群体交乱之放荡娇妻一区二区 | 九九九伊在线综合永久| 一区二区三视频| 成人免费视频免费观看| 亚洲欧美日韩一区二区三区四区| 精品国产一区av| 精品亚洲自拍| 天美星空大象mv在线观看视频| 国产精品初高中害羞小美女文| 国产三级视频在线播放| 69av在线视频| 天天做天天爱天天综合网2021| 亚洲啪av永久无码精品放毛片 | 性生活视频软件| 秋霞av国产精品一区| 久久精品青草| 一二三不卡视频| 日韩欧美一级精品久久| 不卡一二三区| 欧美日韩午夜爽爽| 久久精品在这里| 粉嫩av一区二区夜夜嗨| 国产精品久久久久影院日本| 亚洲午夜av| 美国黄色片视频| 亚洲人成77777在线观看网|