您好,登錄后才能下訂單哦!
本文小編為大家詳細(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è)資訊頻道。
免責(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)容。