最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

同時(shí)使用@LoadBalanced?@RefreshScope注解負(fù)載均衡失效分析

 更新時(shí)間:2023年02月10日 09:14:12   作者:畢小寶  
這篇文章主要為大家介紹了同時(shí)使用@LoadBalanced?@RefreshScope負(fù)載均衡失效問題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

背景

最近引入了 Nacos Config 配置管理能力,說起來用法很簡(jiǎn)單,還是踩了三個(gè)坑。

  • Nacos Config 的 nacos 的帳號(hào)密碼加密配置后,怎么解密而且在 NacosConfigBootstrapConfiguration 真正注入 Nacos Config 注入之前,而且不能觸發(fā) NacosDiscoveryPropertiesisNacosDiscoveryInfoChanged 變動(dòng)事件。因?yàn)?NacosDiscoveryProperties 接受 NacosContextRefresher 事件時(shí),還是從 yml 配置中獲取屬性,不會(huì)從 Environment 對(duì)象中加載。
  • @RefreshScope 要想生效,該注意什么?非 shared-config 的配置變動(dòng)時(shí),要想實(shí)時(shí)生效,必須在當(dāng)前應(yīng)用的 bootstrap.yml 中配置 spring.application.name 屬性,注冊(cè)該應(yīng)用在配置中心需要監(jiān)聽的配置。
  • @RefreshScope + @LoadBalanced 同時(shí)使用導(dǎo)致 Ribbon 負(fù)載均衡失效問題。

問題一比較復(fù)雜,此處不做討論,本文記錄問題三的解決方法及個(gè)人思考。

問題

有個(gè)模塊使用了 @LoadBalanced 負(fù)載均衡,通過配置控制超時(shí)時(shí)間。

引入 Nacos Config 配置后,按照常規(guī)用法,在對(duì)象上添加了 @RefreshScope 屬性,希望配置變動(dòng)時(shí),能實(shí)時(shí)生效。

注入代碼如下:

@Value("${rest.template.connect-timeout:10000}")
private Integer connectTimeout;
@Value("${rest.template.read-timeout:10000}")
private Integer readTimeout;
@Bean
@RefreshScope
@LoadBalanced
public RestTemplate restTemplate(RestTemplateBuilder builder){
SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
      requestFactory.setConnectTimeout(connectTimeout); //連接超時(shí)設(shè)置
      requestFactory.setReadTimeout(readTimeout); //讀寫超時(shí)設(shè)置
      RestTemplate restTemplate = new RestTemplate(requestFactory);
      logger.info("初始化負(fù)載均衡的 RestTemplate 對(duì)象 {} {}", connectTimeout, readTimeout);
      return restTemplate;
  }

修改配置中心的配置后,可以監(jiān)控到 RestTemplate 會(huì)在配置變化后重新初始化了,也打印了最新的配置。

但真正使用這個(gè)類,調(diào)用某個(gè)服務(wù)時(shí),出現(xiàn)了服務(wù)無法解析的異常:

分析

首先,檢查調(diào)用的目標(biāo)服務(wù)是否注冊(cè)成功,目標(biāo)服務(wù)是正常啟動(dòng)的。

其次,對(duì)比其他同樣引用了 @LoadBalancedRestTemplate 的模塊,它調(diào)用是正常的。

最后,對(duì)比異常調(diào)用和正常調(diào)用的注入代碼的區(qū)別,多了一個(gè) @RefreshScope ,調(diào)整代碼驗(yàn)證結(jié)果正常。引入 @RefreshScope 時(shí),在配置變化后才會(huì)發(fā)生這個(gè)異常,首次運(yùn)行時(shí)正常的。

延伸搜索發(fā)現(xiàn),負(fù)載均衡 RestTemplate 也有類似的問題 @scope("prototype")+@loadbalanced注解時(shí)負(fù)載均衡失效問題。

啟示錄

@LoadBalanced@RefreshScope 同時(shí)使用,首次初始化時(shí),RestTemplate 對(duì)象具有負(fù)載均衡的能力;當(dāng) Nacos 配置中的配置變動(dòng)時(shí),這個(gè)對(duì)象會(huì)重新創(chuàng)建,而且此時(shí)并沒有使用 @LoadBalanced 的能力,導(dǎo)致負(fù)載均衡失效。

就是說,這兩個(gè)注解同時(shí)使用時(shí),在不同的時(shí)機(jī),只會(huì)有一個(gè)注解生效:

  • 初始創(chuàng)建時(shí),@LoadBalanced 生效,系統(tǒng)中的實(shí)例是負(fù)載均衡的 RestTemplate;
  • 當(dāng) Nacos 配置變化,NacosContextRefresher 觸發(fā)通知 @RefreshScope 注解的 @Bean 對(duì)象時(shí),重新創(chuàng)建的實(shí)例就是普通的 RestTemplate 了。

引入任何一個(gè)第三方工具,面對(duì)的都是黑盒,各種資料用法看似簡(jiǎn)單,一用就坑不斷啊!建議 Nacos Config 官方配置給出一個(gè)使用建議 @RefreshScope 不要用在 @LoadBalanced 注解上。

最后記錄一個(gè)偶然的發(fā)現(xiàn):

選中幾個(gè)圖片文件后,右側(cè)概覽圖是一個(gè)堆疊的圖,才注意到!

以上就是同時(shí)使用@LoadBalanced @RefreshScope負(fù)載均衡失效分析的詳細(xì)內(nèi)容,更多關(guān)于@LoadBalanced @RefreshScope失效的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Java實(shí)現(xiàn)HTTPS連接的示例代碼

    Java實(shí)現(xiàn)HTTPS連接的示例代碼

    現(xiàn)在的網(wǎng)絡(luò)世界,安全性是大家都非常關(guān)注的問題,特別是對(duì)于咱們這些程序員來說,所以,理解并實(shí)現(xiàn)HTTPS連接,對(duì)于保護(hù)咱們的數(shù)據(jù)安全是極其重要的,下面我們就來學(xué)習(xí)一下在Java中如何實(shí)現(xiàn)HTTPS連接吧
    2023-12-12
  • java樹形菜單對(duì)象生成

    java樹形菜單對(duì)象生成

    這篇文章主要為大家詳細(xì)介紹了java樹形菜單對(duì)象生成,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • java后端請(qǐng)求過濾options方式

    java后端請(qǐng)求過濾options方式

    Optional項(xiàng)是一個(gè)容器對(duì)象,它可以包含非空值,也可以不包含非空值,它用于表示沒有值,而不是使用?null,引入Optional項(xiàng)是為了幫助開發(fā)人員編寫更簡(jiǎn)潔、更具表現(xiàn)力的代碼,并避免?NullPointerException
    2024-01-01
  • 一文詳解SpringBoot?Redis多數(shù)據(jù)源配置

    一文詳解SpringBoot?Redis多數(shù)據(jù)源配置

    Spring?Boot默認(rèn)只允許一種?Redis?連接池配置,且配置受限于?Lettuce?包,不夠靈活,所以本文將為大家介紹如何自定義Redis配置方案實(shí)現(xiàn)多數(shù)據(jù)源支持,需要的可以參考下
    2024-11-11
  • Java十大經(jīng)典排序算法的實(shí)現(xiàn)圖解

    Java十大經(jīng)典排序算法的實(shí)現(xiàn)圖解

    Java常見的排序算法有:插入排序、希爾排序、選擇排序、冒泡排序、歸并排序、快速排序、堆排序、基數(shù)排序等。本文詳解介紹Java十大十大經(jīng)典排序算法的實(shí)現(xiàn)以及圖解,需要的可以參考一下
    2022-03-03
  • 最新評(píng)論

    故城县| 崇文区| 孟州市| 奉节县| 北辰区| 镇康县| 清涧县| 综艺| 象州县| 新郑市| 静安区| 桂林市| 阿鲁科尔沁旗| 贡觉县| 陈巴尔虎旗| 仲巴县| 会同县| 宾阳县| 久治县| 鄂伦春自治旗| 海兴县| 左权县| 高尔夫| 泰顺县| 饶平县| 平安县| 出国| 察雅县| 通山县| 依安县| 九龙城区| 酉阳| 炉霍县| 锡林浩特市| 车险| 冷水江市| 晋江市| 永平县| 南召县| 平定县| 吴江市|