溫馨提示×

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

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

SpringCloud?Ribbon負(fù)載均衡使用策略是什么

發(fā)布時(shí)間:2023-03-13 10:54:36 來(lái)源:億速云 閱讀:112 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇“SpringCloud Ribbon負(fù)載均衡使用策略是什么”文章的知識(shí)點(diǎn)大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價(jià)值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來(lái)看看這篇“SpringCloud Ribbon負(fù)載均衡使用策略是什么”文章吧。

    什么是 Ribbon

    1 ribbon簡(jiǎn)介

    Spring Cloud Ribbon 是基于Netflix Ribbon 實(shí)現(xiàn)的一套客戶端負(fù)載均衡工具,Ribbon客戶端組件提供了一系列的完善的配置,如超時(shí),重試等。

    通過(guò)Load Balancer獲取到服務(wù)提供的所有機(jī)器實(shí)例,Ribbon會(huì)自動(dòng)基于某種規(guī)則(輪詢,隨機(jī))去調(diào)用這些服務(wù)。Ribbon也可以實(shí)現(xiàn)我們自己的負(fù)載均衡算法。

    ribbon在負(fù)載均衡中的角色

    負(fù)載均衡這個(gè)概念大家都不陌生,幾乎可以說(shuō)是互聯(lián)網(wǎng)公司標(biāo)配,目前主流負(fù)載方案主要分為以下兩種:

    集中式負(fù)載均衡,在消費(fèi)者和服務(wù)提供方中間使用獨(dú)立的代理方式進(jìn)行負(fù)載,有硬件的(比如 F5),也有軟件的(比如 Nginx);客戶端根據(jù)自身請(qǐng)求情況做負(fù)載均衡,Ribbon 就屬于客戶端自己做負(fù)載均衡,在dubbo中,客戶端也可以配置負(fù)載均衡策略,也是類(lèi)似的思想;

    2 客戶端負(fù)載均衡

    顧名思義,就是由客戶端根據(jù)自身的情況做負(fù)載均衡策略的選擇或配置,比如spring cloud中的ribbon,簡(jiǎn)單來(lái)說(shuō),當(dāng)服務(wù)提供者將自身的服務(wù)注冊(cè)到服務(wù)注冊(cè)中心之后,客戶端相應(yīng)的會(huì)維護(hù)一個(gè)服務(wù)器地址列表,在發(fā)送請(qǐng)求前,先通過(guò)負(fù)載均衡算法選擇一個(gè)服務(wù)器,然后進(jìn)行訪問(wèn),這就是客戶端負(fù)載均衡,即在客戶端就進(jìn)行負(fù)載均衡算法分配。

    如下,為ribbon作為客戶端的負(fù)載均衡的調(diào)用流程圖。

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    3 服務(wù)端負(fù)載均衡

    即集中式的管控負(fù)載均衡策略的組件,比如Nginx,即所有的請(qǐng)求過(guò)來(lái)之后,先通過(guò)Nginx進(jìn)行負(fù)載均衡,先發(fā)送請(qǐng)求到具體的微服務(wù),然后通過(guò)nginx中配置的負(fù)載均衡算法,在多個(gè)服務(wù)器之間選擇一個(gè)進(jìn)行訪問(wèn),即在服務(wù)器端再進(jìn)行負(fù)載均衡算法分配。

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    4 常用負(fù)載均衡算法

    下面列舉日常開(kāi)發(fā)中經(jīng)常用到的一些負(fù)載均衡算法,可以說(shuō)很多組件的負(fù)載均衡的底層算法思想都是大同小異

    4.1 隨機(jī)算法
    通過(guò)隨機(jī)選擇集群中的某個(gè)可用的服務(wù)進(jìn)行請(qǐng)求執(zhí)行,在集群的各服務(wù)器配置差不多的情況下可以考慮使用,一般這種方式使用較少
    4.2 輪詢算法

    負(fù)載均衡默認(rèn)的實(shí)現(xiàn)方式,請(qǐng)求過(guò)來(lái)之后,依次輪流從可用服務(wù)中選擇進(jìn)行處理

    4.3 加權(quán)輪詢算法
    通過(guò)對(duì)服務(wù)器性能的分型,給高配置,低負(fù)載的服務(wù)器分配更高的權(quán)重,均衡各個(gè)服務(wù)器的壓力;
    4.4 IP地址hash
    根據(jù)請(qǐng)求的地址進(jìn)行Hash,通過(guò)客戶端請(qǐng)求的地址的HASH值取模映射進(jìn)行服務(wù)器調(diào)度,  ip --->hash,這樣相同請(qǐng)求的IP將會(huì)被打到相同的服務(wù)器處理;
    4.5 最小鏈接數(shù)

    即使請(qǐng)求均衡了,壓力也不一定會(huì)均衡,最小連接數(shù)法就是根據(jù)服務(wù)器的情況,比如請(qǐng)求積壓數(shù)等參數(shù),將請(qǐng)求分配到當(dāng)前壓力最小的服務(wù)器上,最小連接數(shù)也叫最小活躍數(shù)。

    Ribbon中負(fù)載均衡策略總探究

    1 nacos中使用ribbon過(guò)程

    在springcloud-alibaba整合nacos中,客戶端通過(guò)nacos進(jìn)行服務(wù)調(diào)用默認(rèn)使用的就是Ribbon負(fù)載均衡,只需下面兩步

    1.1 添加配置類(lèi)

    添加一個(gè)RestTemplate 的配置bean,使用LoadBalanced注解標(biāo)注

    @Configuration
    public class RestConfig {
     
        @Bean
        @LoadBalanced
        public RestTemplate restTemplate(){
            return new RestTemplate();
        }
     
    }
    1.2 接口層調(diào)用

    具體調(diào)用的時(shí)候,仍然使用restTemplate調(diào)用即可,如果服務(wù)端有多個(gè)實(shí)例,將會(huì)自動(dòng)走默認(rèn)負(fù)載均衡策略;

    @RestController
    @RequestMapping("/order")
    public class OrderController {
     
        @Autowired
        RestTemplate restTemplate;
     
        @Value("${service-url.nacos-user-service}")
        private String serverURL;
     
        //localhost:8083/order/add
        @GetMapping("/add")
        public String add(){
            System.out.println("下單成功");
            //String forObject = restTemplate.getForObject("http://localhost:8082/stock/reduct", String.class);
            String forObject = restTemplate.getForObject(serverURL + "/stock/reduct", String.class);
            System.out.println(forObject);
            return "add order  :" + forObject;
        }
     
    }

    2 Ribbon中負(fù)載均衡配置策略

    通過(guò)完整的類(lèi)的依賴(lài)關(guān)系圖,可以看到Ribbon提供了很多種負(fù)載均衡策略,下面就Ribbon中常用的負(fù)載均衡策略做詳細(xì)的解讀。

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    2.1 IRule

    這是所有負(fù)載均衡策略的父接口,里邊的核心方法就是choose方法,用來(lái)選擇一個(gè)服務(wù)實(shí)例

    2.2  AbstractLoadBalancerRule

    一個(gè)抽象類(lèi),里邊主要定義了一個(gè)ILoadBalancer,這里定義它的目的主要是輔助負(fù)責(zé)均衡策略選取合適的服務(wù)端實(shí)例。

    2.3  RandomRule

    這種負(fù)載均衡策略就是隨機(jī)從多個(gè)服務(wù)實(shí)例中選擇一個(gè)服務(wù)實(shí)例

    通過(guò)源碼發(fā)現(xiàn),在RandomRule的無(wú)參構(gòu)造方法中初始化了一個(gè)Random對(duì)象,然后在它重寫(xiě)的choose方法又調(diào)用了choose(ILoadBalancer lb, Object key)這個(gè)重載的choose方法,在這個(gè)重載的choose方法中,每次利用random對(duì)象生成一個(gè)不大于服務(wù)實(shí)例總數(shù)的隨機(jī)數(shù),并將該數(shù)作為下標(biāo)所以獲取一個(gè)服務(wù)實(shí)例;

    可以參閱源碼

    public Server choose(ILoadBalancer lb, Object key) {
            if (lb == null) {
                return null;
            } else {
                Server server = null;
     
                while(server == null) {
                    if (Thread.interrupted()) {
                        return null;
                    }
     
                    List<Server> upList = lb.getReachableServers();
                    List<Server> allList = lb.getAllServers();
                    int serverCount = allList.size();
                    if (serverCount == 0) {
                        return null;
                    }
     
                    int index = this.chooseRandomInt(serverCount);
                    server = (Server)upList.get(index);
                    if (server == null) {
                        Thread.yield();
                    } else {
                        if (server.isAlive()) {
                            return server;
                        }
     
                        server = null;
                        Thread.yield();
                    }
                }
     
                return server;
            }
        }
    2.4  RoundRobinRule

    RoundRobinRule 這種負(fù)載均衡策略也叫線性輪詢負(fù)載均衡策略

    這個(gè)類(lèi)的choose(ILoadBalancer lb, Object key)方法整體邏輯是這樣的:

    • 開(kāi)啟一個(gè)計(jì)數(shù)器count,在while循環(huán)中遍歷務(wù)清單,獲取清單之前先通過(guò)incrementAndGetModulo方法獲取一個(gè)下標(biāo),這個(gè)下標(biāo)是一個(gè)不斷自增長(zhǎng)的數(shù)先加1然后和服務(wù)清單總數(shù)取模之后獲取到的(所以這個(gè)下標(biāo)從來(lái)不會(huì)越界);

    • 然后拿著下標(biāo)再去服務(wù)清單列表中取服務(wù),每次循環(huán)計(jì)數(shù)器都會(huì)加1,如果連續(xù)10次都沒(méi)有取到服務(wù),則會(huì)報(bào)一個(gè)警告No available alive servers after 10 tries from load balancer: XXXX;

    2.5  RetryRule
    在輪詢基礎(chǔ)上重試,即這種負(fù)載均衡策略帶有重試功能

    它整體工作流程是這樣:

    • 首先RetryRule中定義了一個(gè)subRule,它的實(shí)現(xiàn)類(lèi)是RoundRobinRule;

    • 然后在RetryRule的choose(ILoadBalancer lb, Object key)方法中,每次還是采用RoundRobinRule中的choose規(guī)則來(lái)選擇一個(gè)服務(wù)實(shí)例;

    • 如果選到的實(shí)例正常就返回,如果選擇的服務(wù)實(shí)例為null或者已經(jīng)失效,則在失效時(shí)間deadline之前不斷的進(jìn)行重試(重試時(shí)獲取服務(wù)的策略還是RoundRobinRule中定義的策略);

    • 如果超過(guò)了deadline還是沒(méi)取到則會(huì)返回一個(gè)null;

    2.6 WeightedResponseTimeRule

    顧名思義,帶有權(quán)重功能,權(quán)重 &mdash; nacos的NacosRule ,Nacos還擴(kuò)展了一個(gè)自己的基于配置的權(quán)重?cái)U(kuò)展 

    大致工作原理如下:

    • WeightedResponseTimeRule是RoundRobinRule的一個(gè)子類(lèi),在WeightedResponseTimeRule中對(duì)RoundRobinRule的功能進(jìn)行了擴(kuò)展;

    • WeightedResponseTimeRule中會(huì)根據(jù)每一個(gè)實(shí)例的運(yùn)行情況來(lái)給計(jì)算出該實(shí)例的一個(gè)權(quán)重,然后在挑選實(shí)例的時(shí)候則根據(jù)權(quán)重進(jìn)行挑選,這樣能夠?qū)崿F(xiàn)更優(yōu)的實(shí)例調(diào)用;

    • WeightedResponseTimeRule中有一個(gè)名叫DynamicServerWeightTask的定時(shí)任務(wù),默認(rèn)情況下每隔30秒會(huì)計(jì)算一次各個(gè)服務(wù)實(shí)例的權(quán)重;

    • 權(quán)重計(jì)算規(guī)則很簡(jiǎn)單,如果一個(gè)服務(wù)的平均響應(yīng)時(shí)間越短則權(quán)重越大,那么該服務(wù)實(shí)例被選中執(zhí)行任務(wù)的概率也就越大;

    2.7 ClientConfigEnabledRoundRobinRule

    這種策略實(shí)現(xiàn)很簡(jiǎn)單,內(nèi)部定義了RoundRobinRule,choose方法還是采用了RoundRobinRule的 choose方法,所以它的選擇策略和RoundRobinRule的選擇策略一致,就不再過(guò)多不贅述。

    2.8 BestAvailableRule
    • BestAvailableRule繼承自ClientConfigEnabledRoundRobinRule;

    • 它在ClientConfigEnabledRoundRobinRule的基礎(chǔ)上主要增加了根據(jù)loadBalancerStats中保存的服務(wù)實(shí)例的狀態(tài)信息來(lái)過(guò)濾掉失效的服務(wù)實(shí)例的功能,然后順便找出并發(fā)請(qǐng)求最小的服務(wù)實(shí)例來(lái)使用;

    • 然而loadBalancerStats有可能為null,如果loadBalancerStats為null,則BestAvailableRule將采用它的父類(lèi)即ClientConfigEnabledRoundRobinRule的服務(wù)選取策略(線性輪詢);

    2.9 ZoneAvoidanceRule
    默認(rèn)規(guī)則 ,復(fù)合判斷server所在區(qū)域的性能和server的可用性選擇服務(wù)器
    • ZoneAvoidanceRule是PredicateBasedRule的一個(gè)實(shí)現(xiàn)類(lèi),只不過(guò)這里多一個(gè)過(guò)濾條件;

    • ZoneAvoidanceRule中的過(guò)濾條件是以ZoneAvoidancePredicate為主過(guò)濾條件和以AvailabilityPredicate為次過(guò)濾條件組成的一個(gè)叫做CompositePredicate的組合過(guò)濾條件;

    • 過(guò)濾成功之后,繼續(xù)采用線性輪詢(RoundRobinRule)的方式從過(guò)濾結(jié)果中選擇一個(gè)出來(lái);

    2.10 AvailabilityFilteringRule

    先過(guò)濾掉故障實(shí)例,再選擇并發(fā)較小的實(shí)例,具體來(lái)說(shuō),過(guò)濾掉一直連接失敗的被標(biāo)記為circuit tripped的后端Server,并過(guò)濾掉那些高并發(fā)的后端Server或者使用一個(gè)AvailabilityPredicate來(lái) 包含過(guò)濾server的邏輯,其實(shí)就是檢查status里記錄的各個(gè)Server的運(yùn)行狀態(tài)。

    Ribbon負(fù)載均衡策略修改

    上面詳細(xì)了解了Ribbon中的常用的一些負(fù)載均衡配置策略,接下來(lái)通過(guò)實(shí)際操作演示下如何修改Ribbon的負(fù)載均衡配置策略。

    1  通過(guò)配置類(lèi)方式修改

    這是一種比較靈活的修改配置方式,只需要添加一個(gè)配置類(lèi),并配置指定的負(fù)載均衡bean即可

    1.1  增加一個(gè)負(fù)載均衡策略配置類(lèi)

    注意這里有個(gè)坑,自定義的配置類(lèi)不能寫(xiě)在@SpringbootApplication注解的@CompentScan掃描得到的地方,否則自定義的配置類(lèi)就會(huì)被所有的 RibbonClients共享。

    因此實(shí)際開(kāi)發(fā)中不建議這么使用,推薦yml方式

    工程的目錄結(jié)構(gòu)如下

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    RibbonRandomRuleConfig 配置類(lèi)

    @Configuration
    public class RibbonRandomRuleConfig {
     
        @Bean
        public IRule iRule(){
            return new RandomRule();
        }
    }
    1.2  啟動(dòng)類(lèi)指定負(fù)載均衡配置類(lèi)
    @SpringBootApplication
    @RibbonClients(value = {
            @RibbonClient(name = "stock-service",configuration = RibbonRandomRuleConfig.class)
    })
    public class RibbonOrderApp {
     
        public static void main(String[] args) {
            SpringApplication.run(RibbonOrderApp.class,args);
        }
     
    }
    1.3  測(cè)試負(fù)載均衡策略是否生效

    分別啟動(dòng)stock-service的兩個(gè)工程,再啟動(dòng)order工程,stock-service可以在idea中通過(guò)區(qū)分端口的方式

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    啟動(dòng)完成之后,檢查nacos,可以看到stock-service有兩個(gè)服務(wù)實(shí)例,這正好是我們希望的

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    調(diào)用order模塊的接口:http://localhost:8030/order/add,由于是客戶端負(fù)載均衡,而且我們配置的是隨機(jī)的策略,預(yù)計(jì)在隨機(jī)調(diào)用該接口之后,會(huì)呈現(xiàn)出不同的接口

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

     多調(diào)用幾次,可以看到8021與8023對(duì)應(yīng)的服務(wù)不斷交替出現(xiàn),并且沒(méi)什么規(guī)律

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    2  通過(guò)配置文件方式修改

    2.1 修改啟動(dòng)類(lèi)

    去掉啟動(dòng)類(lèi)中的注解信息

    @SpringBootApplication
    /*@RibbonClients(value = {
            @RibbonClient(name = "stock-service",configuration = RibbonRandomRuleConfig.class)
    })*/
    public class RibbonOrderApp {
     
        public static void main(String[] args) {
            SpringApplication.run(RibbonOrderApp.class,args);
        }
     
    }
    2.2 配置文件指定具體的負(fù)載均衡策略

    在配置文件下方增加如下配置,這里是哦也能夠的是nacos提供的基于權(quán)重的策略,也可以選擇其他的;

    stock-service:
      ribbon:
        NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
    2.3 修改stock-service 的權(quán)重配置

    在nacos服務(wù)列表那一欄,進(jìn)入到如下所示 stock-servide具體的詳情頁(yè)面

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    分別編輯兩個(gè)實(shí)例的權(quán)重大小,比如這里給8023實(shí)例權(quán)重為10,另一個(gè)保持默認(rèn)為1

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    設(shè)置完成后按照預(yù)期猜想,設(shè)置權(quán)重更高的那個(gè)將會(huì)優(yōu)先得到訪問(wèn)的機(jī)會(huì),啟動(dòng)order服務(wù),再次按照上面的方式調(diào)用多次觀察效果

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    粗略統(tǒng)計(jì)發(fā)現(xiàn),在10多次的請(qǐng)求中,權(quán)重高的那個(gè)被訪問(wèn)的次數(shù)更多,這也就符合我們的預(yù)期效果了;

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    3 自定義負(fù)載均衡策略

    從上面的ribbon類(lèi)圖可以發(fā)現(xiàn),通過(guò)實(shí)現(xiàn) IRule 接口可以自定義負(fù)載策略,主要的選擇服務(wù)邏輯在 choose 方法中完成,最簡(jiǎn)單的就是繼承AbstractLoadBalancerRule這個(gè)抽象類(lèi);

    3.1 自定義負(fù)載均衡類(lèi)

    只需要繼承AbstractLoadBalancerRule抽象類(lèi),并重寫(xiě)里面的choose方式,在該方式中,使用了類(lèi)似的隨機(jī)算法的策略,也可以根據(jù)自身的需求,定制特定的負(fù)載均衡算法;

    public class CustomRule extends AbstractLoadBalancerRule {
     
        private static Logger logger = LoggerFactory.getLogger(CustomRule.class);
     
     
        @Override
        public Server choose(Object o) {
     
            ILoadBalancer loadBalancer = this.getLoadBalancer();
            List<Server> reachableServers = loadBalancer.getReachableServers();
            int i = ThreadLocalRandom.current().nextInt(reachableServers.size());
            Server server = reachableServers.get(i);
            return server;
        }
     
        @Override
        public void initWithNiwsConfig(IClientConfig iClientConfig) {
     
        }
    }
    3.2 配置文件中使用自定義配置類(lèi)
    stock-service:
      ribbon:
        #NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule
        #使用自定義的負(fù)載均衡策略
        NFLoadBalancerRuleClassName: com.ribbon.CustomRule
    3.3 啟動(dòng)工程并測(cè)試

    將上一步的nacos中stock-service的兩個(gè)服務(wù)實(shí)例的權(quán)重都調(diào)整為1,然后再次訪問(wèn)接口,可以看到呈現(xiàn)出隨機(jī)的效果;

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    3.4 ribbon負(fù)載均衡懶加載模式

    Ribbon的負(fù)載均衡策略默認(rèn)是懶加載,意味著只有在發(fā)起調(diào)用的時(shí)候才會(huì)創(chuàng)建客戶端,這帶來(lái)的問(wèn)題是,如果網(wǎng)絡(luò)不好,第一次調(diào)用的時(shí)候可能會(huì)出現(xiàn)調(diào)用超時(shí),我們通過(guò)控制臺(tái)日志也能看出來(lái);

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    如何解決這個(gè)問(wèn)題呢?可以手動(dòng)開(kāi)啟饑餓加載,來(lái)解決第一次調(diào)用慢的問(wèn)題,只需要在配置文件中添加如下配置即可;

    ribbon:
      eager-load:
        # 開(kāi)啟ribbon饑餓加載
        enabled: true
        # 配置stock-service使用ribbon饑餓加載,多個(gè)使用逗號(hào)分隔
        clients: stock-service

    再次重啟order服務(wù),通過(guò)控制臺(tái)輸出日志可以看到,在啟動(dòng)的時(shí)候負(fù)載均衡策略就被加載了;

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    Spring Cloud LoadBalancer

    1 概述

    Spring Cloud LoadBalancer是Spring Cloud官方自己提供的客戶端負(fù)載均衡器, 用來(lái)替代
    Ribbon

    Spring 官方提供了兩種負(fù)載均衡客戶端

    1.1 RestTemplate

    RestTemplate是 Spring提供的用于訪問(wèn)Rest服務(wù)的客戶端,RestTemplate提供了多種便捷訪問(wèn)遠(yuǎn)程Http服務(wù)的方法,能夠大大提高客戶端的編寫(xiě)效率。默認(rèn)情況下,RestTemplate默認(rèn)依賴(lài)jdk的HTTP連接工具

    1.2 Webclient

    WebClient是從Spring WebFlux 5.0版本開(kāi)始提供的一個(gè)非阻塞的基于響應(yīng)式編程的進(jìn)行Http請(qǐng)求的客戶端工具。它的響應(yīng)式編程的基于Reactor的。WebClient中提供了標(biāo)準(zhǔn)Http請(qǐng)求方式對(duì)應(yīng)的get、post、put、delete等方法,可以用來(lái)發(fā)起相應(yīng)的請(qǐng)求

    2  RestTemplate 整合LoadBalancer

    2.1 創(chuàng)建一個(gè)新的order模塊,引入下面的依賴(lài)
     <dependencies>
     
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
     
            <!--nacos-config 配置中心-自帶動(dòng)態(tài)刷新-->
            <!--<dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            </dependency>-->
     
            <!--nacos-discovery 注冊(cè)中心-服務(wù)發(fā)現(xiàn)與注冊(cè)-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                <exclusions>
                    <exclusion>
                        <groupId>org.springframework.cloud</groupId>
                        <artifactId>spring‐cloud‐starter‐netflix‐ribbon</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
     
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring‐cloud‐starter‐loadbalancer</artifactId>
            </dependency>
     
        </dependencies>
    2.2  添加如下配置文件

    這里主要是將默認(rèn)的ribbon的loadbalancer負(fù)載均衡策略禁用掉

    server:
      port: 8033
     
    spring:
      application:
        name: order-service
      cloud:
        nacos:
          discovery:
            server-addr: localhost:8848 #服務(wù)注冊(cè)中心地址
          #config:
            #server-addr: localhost:8848 #配置中心地址
        loadbalancer:
          ribbon:
            enabled: false
     
    service-url:
      nacos-user-service: http://stock-service
    2.3 啟動(dòng)類(lèi)
    @SpringBootApplication
    //@EnableDiscoveryClient
    public class BalancerOrderApp {
        public static void main(String[] args) {
            SpringApplication.run(BalancerOrderApp.class,args);
        }
     
    }
    2.4 模擬測(cè)試

    啟動(dòng)stock-service和當(dāng)前order模塊,啟動(dòng)完成后,界面調(diào)用:localhost:8033/order/add

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    loadbalancer默認(rèn)走的是輪詢策略,通過(guò)反復(fù)調(diào)用上面的接口,可以看到請(qǐng)求的結(jié)果端口顯示看,是stock-service兩個(gè)服務(wù)輪著來(lái)的;

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    SpringCloud?Ribbon負(fù)載均衡使用策略是什么

    以上就是關(guān)于“SpringCloud Ribbon負(fù)載均衡使用策略是什么”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對(duì)大家有幫助,若想了解更多相關(guān)的知識(shí)內(nèi)容,請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

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

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

    AI