欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringCloud LoadBalancer自定義負(fù)載均衡器使用解析

 更新時(shí)間:2023年04月17日 08:34:41   作者:程序員李哈  
LoadBalancerClient 是 SpringCloud 提供的一種負(fù)載均衡客戶端,Ribbon 負(fù)載均衡組件內(nèi)部也是集成了 LoadBalancerClient 來實(shí)現(xiàn)負(fù)載均衡,本文給大家深入解析 LoadBalancerClient 接口源碼,感興趣的朋友跟隨小編一起看看吧

由于原有的負(fù)載均衡組件Ribbon停止維護(hù),而完美的Spring生態(tài)怎能允許缺少負(fù)載均衡組件呢?Spring Cloud官方自己造出了Spring Cloud LoadBalancer來代替原有的Ribbon。由于是官方自己寫的組件,所以并沒有像eureka、Feign那樣抽出一個(gè)單獨(dú)的組件包出來。而放入到Spring Cloud Commons規(guī)范包中。

正文

Spring Cloud LoadBalancer 幫開發(fā)者已經(jīng)實(shí)現(xiàn)了RoundRobinLoadBalancer、RandomLoadBalancer,分別是輪訓(xùn)和隨機(jī),默認(rèn)實(shí)現(xiàn)為輪訓(xùn)。

即讓是負(fù)載均衡組件,那必然有默認(rèn)實(shí)現(xiàn),也必然有擴(kuò)展接口暴露給開發(fā)者。所以第一步肯定是介紹抽象接口。

// 負(fù)載均衡的標(biāo)志性接口,繼承ReactorLoadBalancer接口
// 本接口無任何接口增強(qiáng),僅僅作為一個(gè)標(biāo)志性接口。
public interface ReactorServiceInstanceLoadBalancer extends ReactorLoadBalancer<ServiceInstance> 
// 在Spring Cloud高版本中大部分組件采用了Reacotr框架(有一說一,閱讀性極差?。。?
// 這里定義了一個(gè)選擇的抽象方法。
public interface ReactorLoadBalancer<T> extends ReactiveLoadBalancer<T> {
	Mono<Response<T>> choose(Request request);
	default Mono<Response<T>> choose() {
		return choose(REQUEST);
	}
}

這里有涉及到Reactor框架,不過完全可以當(dāng)黑盒使用。接口非常的簡(jiǎn)單就一個(gè)choose方法,所以接下來我們只需要實(shí)現(xiàn)此接口。

@LoadBalancerClient(value = "deptmanagecloud-provider", configuration = MyConfig.class)
public class MyConfig {
    // 配置負(fù)載均衡策略
    @Bean
    public ReactorLoadBalancer<ServiceInstance> myLB(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        return new MyLB(
                loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class));
    }
}

這里有部分邏輯,讀者完全可以當(dāng)作黑盒暫時(shí)不需要去理解。只需要明白從注冊(cè)中心拿到注冊(cè)表以后會(huì)執(zhí)行g(shù)etInstanceResponse方法,只需要實(shí)現(xiàn)自定義負(fù)載均衡策略的邏輯即可,好比我這里的邏輯是永遠(yuǎn)只調(diào)用一個(gè)服務(wù)(當(dāng)然,這完全扯淡,僅僅是Demo無須太關(guān)心)

既然我們把自定義負(fù)載均衡策略寫好了,那么,怎么告訴Spring呢?肯定需要注入給Spring。

@LoadBalancerClient(value = "deptmanagecloud-provider", configuration = MyConfig.class)
public class MyConfig {
    // 配置負(fù)載均衡策略
    @Bean
    public ReactorLoadBalancer<ServiceInstance> myLB(Environment environment, LoadBalancerClientFactory loadBalancerClientFactory) {
        String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
        return new MyLB(
                loadBalancerClientFactory.getLazyProvider(name, ServiceInstanceListSupplier.class));
    }
}

這里需要?上@LoadBalancerClient注解,value為調(diào)用方的服務(wù)名,configuration為配置類

總結(jié)

相比以前的Ribbon的IRule方式這個(gè)要復(fù)雜一些,不過大部分都是造輪子,開發(fā)者只需要關(guān)心自定義的負(fù)載均衡邏輯即可~!

到此這篇關(guān)于SpringCloud LoadBalancer自定義負(fù)載均衡器使用解析的文章就介紹到這了,更多相關(guān)SpringCloud LoadBalancer內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • SpringBoot內(nèi)部外部配置文件加載順序解析

    SpringBoot內(nèi)部外部配置文件加載順序解析

    這篇文章主要介紹了SpringBoot內(nèi)部外部配置文件加載順序解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 解決java.lang.IllegalStateException:Duplicate key異常問題

    解決java.lang.IllegalStateException:Duplicate key異常問題

    java.lang.IllegalStateException:Duplicatekey異常在將List轉(zhuǎn)換為Map時(shí)出現(xiàn),解決方法是使用toMap()的重載方法,如果已經(jīng)存在則不再修改,直接使用上一個(gè)數(shù)據(jù)
    2025-03-03
  • java開發(fā)之File類詳細(xì)使用方法介紹

    java開發(fā)之File類詳細(xì)使用方法介紹

    這篇文章主要介紹了java開發(fā)之File類詳細(xì)使用方法介紹,需要的朋友可以參考下
    2020-02-02
  • Mybatis中 mapper-locations和@MapperScan的作用

    Mybatis中 mapper-locations和@MapperScan的作用

    這篇文章主要介紹了Mybatis中 mapper-locations和@MapperScan的作用,mybatis.mapper-locations在SpringBoot配置文件中使用,作用是掃描Mapper接口對(duì)應(yīng)的XML文件,需要的朋友可以參考下
    2023-05-05
  • 詳解Spring boot/Spring 統(tǒng)一錯(cuò)誤處理方案的使用

    詳解Spring boot/Spring 統(tǒng)一錯(cuò)誤處理方案的使用

    這篇文章主要介紹了詳解Spring boot/Spring 統(tǒng)一錯(cuò)誤處理方案的使用,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-06-06
  • SpringBoot如何手寫一個(gè)starter并使用這個(gè)starter詳解

    SpringBoot如何手寫一個(gè)starter并使用這個(gè)starter詳解

    starter是SpringBoot中的一個(gè)新發(fā)明,它有效的降低了項(xiàng)目開發(fā)過程的復(fù)雜程度,對(duì)于簡(jiǎn)化開發(fā)操作有著非常好的效果,下面這篇文章主要給大家介紹了關(guān)于SpringBoot如何手寫一個(gè)starter并使用這個(gè)starter的相關(guān)資料,需要的朋友可以參考下
    2022-12-12
  • Java中instanceof關(guān)鍵字實(shí)例講解

    Java中instanceof關(guān)鍵字實(shí)例講解

    大家好,本篇文章主要講的是Java中instanceof關(guān)鍵字實(shí)例講解,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下
    2022-01-01
  • Java注解詳細(xì)介紹

    Java注解詳細(xì)介紹

    這篇文章主要介紹了Java注解詳細(xì)介紹,本文講解了Java注解是什么、Java注解基礎(chǔ)知識(shí)、Java注解類型、定義Java注解類型的注意事項(xiàng)等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • IDEA初次配置并導(dǎo)入gite碼云的方法

    IDEA初次配置并導(dǎo)入gite碼云的方法

    這篇文章主要介紹了IDEA初次配置并導(dǎo)入gite碼云的方法,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • 基于Java內(nèi)存溢出的解決方法詳解

    基于Java內(nèi)存溢出的解決方法詳解

    本篇文章是對(duì)Java內(nèi)存溢出的解決方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論