溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

SpringCloud?LoadBalancer自定義負(fù)載均衡器怎么使用

發(fā)布時(shí)間:2023-04-17 10:22:51 來源:億速云 閱讀:141 作者:iii 欄目:開發(fā)技術(shù)

本文小編為大家詳細(xì)介紹“SpringCloud LoadBalancer自定義負(fù)載均衡器怎么使用”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“SpringCloud LoadBalancer自定義負(fù)載均衡器怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來學(xué)習(xí)新知識(shí)吧。

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)黑盒使用。接口非常的簡單就一個(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í)不需要去理解。只需要明白從注冊中心拿到注冊表以后會(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為配置類

讀到這里,這篇“SpringCloud LoadBalancer自定義負(fù)載均衡器怎么使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI