国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

springCloud之Eureka之負(fù)載均衡Ribbon

這篇具有很好參考價(jià)值的文章主要介紹了springCloud之Eureka之負(fù)載均衡Ribbon。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

引言

說完了注冊(cè)中心Eureka,雖然Eureka可以實(shí)現(xiàn)服務(wù)的發(fā)現(xiàn)和調(diào)用,但在微服務(wù)體系中,服務(wù)的發(fā)現(xiàn)和調(diào)用往往是需要伴隨著負(fù)載均衡這個(gè)概念一體的。而在SpringCloud中自然也存在著與Eureka配套的負(fù)載均衡組件,也就是Ribbon組件。

Ribbon介紹

Spring Cloud Ribbon是基于Netflix Ribbon實(shí)現(xiàn)的一套 客戶端 負(fù)載均衡 工具

簡單的說,Ribbon是Netflix發(fā)布的開源項(xiàng)目,主要功能是提供客戶端的軟件負(fù)載均衡算法,將Netflix的中間層服務(wù)連接在一起。Ribbon客戶端組件提供一系列完善的配置項(xiàng)如連接超時(shí),重試等。簡單的說,就是在配置文件中列出Load Balancer(簡稱LB)后面所有的機(jī)器,Ribbon會(huì)自動(dòng)的幫助你基于某種規(guī)則(如簡單輪詢,隨機(jī)連接等)去連接這次額機(jī)器。我們也很容易使用Ribbon實(shí)現(xiàn)自定義的負(fù)載均衡算法。

使用 Ribbon 工作原理

所有的項(xiàng)目都會(huì)注冊(cè)到 Eureka 中,Eureka 允許不同項(xiàng)目的 spring.application.name 相同。當(dāng)相同時(shí)會(huì)認(rèn)為是這些項(xiàng)目是一個(gè)集群,所以同一個(gè)項(xiàng)目部署多次都是設(shè)置應(yīng)用程序名相同。

Application Client 會(huì)從 Eureka 中根據(jù) spring.application.name 加載 Application Service 的列表。根據(jù)設(shè)定的負(fù)載均衡算法,從列表中取出一個(gè) URL,到此 Ribbon 的事情結(jié)束。剩下的事情由程序員自己進(jìn)行技術(shù)選型,選擇一個(gè) HTTP 協(xié)議工具,通過這個(gè) URL 調(diào)用 Application Service。

注意:以下事情和 Ribbon 沒有關(guān)系的
Application Service 注冊(cè)到 Eureka 過程。這是 Eureka 的功能。
Application Client 從 Eureka 取出注冊(cè)列表。這是 Eureka 的功能。
Application Client 通過 URL 訪問 Application Service 。這個(gè)根據(jù)自己使用的 HTTP 工具。
只有 Application Client 從 Eureka 中取出列表后進(jìn)行負(fù)載均衡算法的過程和Ribbon有關(guān)。

Ribbon使用

  • 1.導(dǎo)入依賴,需要在消費(fèi)者中導(dǎo)入ribbon和eureka依賴
    springCloud之Eureka之負(fù)載均衡Ribbon
 <!--Ribbon-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
        </dependency>
        <!--Eureka-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-eureka</artifactId>
            <version>1.4.6.RELEASE</version>
        </dependency>
  • 2.配置文件
#Eureka
eureka:
client:
  register-with-eureka: false #不在注冊(cè)中心注冊(cè)自己
  service-url:
    defaultZone : http://eureka8001.com:8001/eureka/,http://eureka8002.com:8002/eureka/,http://eureka8003.com:8003/eureka/
  • 3.添加負(fù)載均衡注解
@Configuration
public class BeanConfig {

 @Bean
 @LoadBalanced //Ribbon開啟負(fù)載均衡
 public RestTemplate getRestTemplate(){
     
     return  new RestTemplate();
 }

}
  • 4.啟動(dòng)類添加Eureka注解
    springCloud之Eureka之負(fù)載均衡Ribbon

配置多個(gè)服務(wù)提供者

為了明確的表示,注冊(cè)中心和負(fù)載均衡的功能實(shí)現(xiàn),啟動(dòng)三個(gè)Eureka服務(wù),啟動(dòng)三個(gè)服務(wù)提供者,啟動(dòng)一個(gè)服務(wù)消費(fèi)者,目標(biāo)實(shí)現(xiàn)==調(diào)用服務(wù)消費(fèi)者相同的接口,調(diào)用不同的服務(wù)提供者的服務(wù)。==不同的服務(wù)返回不同的id:7001,7002,7003
springCloud之Eureka之負(fù)載均衡Ribbon
項(xiàng)目啟動(dòng)后,每一個(gè)eureka中有兩個(gè)eureka服務(wù),相同的application有對(duì)應(yīng)三個(gè)服務(wù)提供者
springCloud之Eureka之負(fù)載均衡Ribbon
訪問相同的服務(wù)地址,負(fù)載均衡到不同的服務(wù)提供者,不影響返回的結(jié)果。(id為了區(qū)分不同的服務(wù)而設(shè)置)
springCloud之Eureka之負(fù)載均衡Ribbon
springCloud之Eureka之負(fù)載均衡Ribbon
springCloud之Eureka之負(fù)載均衡Ribbon

Ribbon核心組件IRule實(shí)現(xiàn)負(fù)載均衡算法

IRule:根據(jù)特定算法從服務(wù)列表中選取一個(gè)要訪問的服務(wù)。默認(rèn)是輪詢
每一接口實(shí)現(xiàn),都是一個(gè)負(fù)載均衡策略
springCloud之Eureka之負(fù)載均衡Ribbon
設(shè)置隨機(jī)的負(fù)載均衡策略
在配置類中,生成一個(gè)有spring管理的IRule對(duì)象,當(dāng)項(xiàng)目啟動(dòng)后如果有spring管理的bean,則用相應(yīng)的負(fù)載均衡策略,如果沒有,則使用默認(rèn)的隨機(jī)策略。文章來源地址http://www.zghlxwxcb.cn/news/detail-447905.html

@Configuration
public class BeanConfig {

    @Bean
    @LoadBalanced //Ribbon開啟負(fù)載君和的注解
    //AvailabilityFilteringRule 過濾掉跳閘,加載慢。。的服務(wù),其他的輪詢
    //RandomRule 隨機(jī)
    //RetryRule 重試
    //RoundRobinRule 輪詢
    //WeightedResponseTimeRule 設(shè)置權(quán)重
    public RestTemplate getRestTemplate(){

        return  new RestTemplate();
    }
    //設(shè)置隨機(jī)的負(fù)載均衡策略
    @Bean
    public IRule myRule(){
        return  new RandomRule();
    }

}

自定義負(fù)載均衡策略(依次訪問3次,循環(huán)訪問)

  • .模仿實(shí)現(xiàn)類
    springCloud之Eureka之負(fù)載均衡Ribbon
  • 具體代碼實(shí)現(xiàn)
package com.kuang.myRule;

import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.AbstractLoadBalancerRule;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.Server;

import java.util.List;
import java.util.concurrent.ThreadLocalRandom;
public class myRule extends AbstractLoadBalancerRule {
    private int total =0;
    private int currentIndex =0;
    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;
                }
                //自定義部分代碼開始
                if(total<3){
                    server =upList.get(currentIndex);
                    total++;
                }else{
                    total=1;
                    currentIndex++;
                   if(currentIndex>allList.size()-1){//如果有服務(wù)掛起,不會(huì)報(bào)錯(cuò)
                        currentIndex=0;
                    }
                }
                server =upList.get(currentIndex);
                //自定義部分代碼結(jié)束

                //原隨機(jī)代碼
                //int index = this.chooseRandomInt(serverCount); 獲取隨機(jī)下標(biāo)
               // server = (Server)upList.get(index); 獲取server
                if (server == null) {
                    Thread.yield();
                } else {
                    if (server.isAlive()) {
                        return server;
                    }

                    server = null;
                    Thread.yield();
                }
            }

            return server;
        }
    }

    protected int chooseRandomInt(int serverCount) {
        return ThreadLocalRandom.current().nextInt(serverCount);
    }

    public Server choose(Object key) {
        return this.choose(this.getLoadBalancer(), key);
    }

    public void initWithNiwsConfig(IClientConfig clientConfig) {
    }

}
  • 將配置類中的負(fù)載均衡換成自定義
    springCloud之Eureka之負(fù)載均衡Ribbon
    這樣就可以實(shí)現(xiàn)沒有服務(wù)輪詢?nèi)蔚呢?fù)載均衡策略。

到了這里,關(guān)于springCloud之Eureka之負(fù)載均衡Ribbon的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringCloud微服務(wù) 【實(shí)用篇】| Eureka注冊(cè)中心、Ribbon負(fù)載均衡

    SpringCloud微服務(wù) 【實(shí)用篇】| Eureka注冊(cè)中心、Ribbon負(fù)載均衡

    目錄 一:Eureka注冊(cè)中心 1. Eureka原理 2. 動(dòng)手實(shí)踐 ①搭建EurekaServer ②服務(wù)注冊(cè) ③服務(wù)發(fā)現(xiàn)? 二:Ribbon負(fù)載均衡 1. 負(fù)載均衡原理 2.?負(fù)載均衡策略 3. 懶加載 tips:前些天突然發(fā)現(xiàn)了一個(gè)巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家,感興趣的同學(xué)可以

    2024年02月05日
    瀏覽(21)
  • SpringCloud實(shí)用篇1——eureka注冊(cè)中心 Ribbon負(fù)載均衡原理 nacos注冊(cè)中心

    SpringCloud實(shí)用篇1——eureka注冊(cè)中心 Ribbon負(fù)載均衡原理 nacos注冊(cè)中心

    單體架構(gòu): 將業(yè)務(wù)的所有功能集中在一個(gè)項(xiàng)目中開發(fā),打成一個(gè)包部署。 優(yōu)點(diǎn):架構(gòu)簡單;部署成本低(打jar包、部署、負(fù)載均衡就完成了) 缺點(diǎn):耦合度高(維護(hù)困難、升級(jí)困難,不利于大項(xiàng)目開發(fā)) 分布式架構(gòu) 根據(jù)業(yè)務(wù)功能對(duì)系統(tǒng)做拆分,每個(gè)業(yè)務(wù)功能模塊作為獨(dú)立

    2024年02月13日
    瀏覽(19)
  • 基于SpringCloud的微服務(wù)架構(gòu)學(xué)習(xí)筆記(2)注冊(cè)中心Eureka和負(fù)載均衡Ribbon

    基于SpringCloud的微服務(wù)架構(gòu)學(xué)習(xí)筆記(2)注冊(cè)中心Eureka和負(fù)載均衡Ribbon

    1.7.1 遠(yuǎn)程調(diào)用的問題 地址信息獲取 : 服務(wù)消費(fèi)者 如何獲取 服務(wù)提供者 的 地址信息 (不能每次都寫死): URL:http://localhost:8081/user/\\\"+order.getUserId() 多選一 :如果有多個(gè)服務(wù)提供者,消費(fèi)者如何進(jìn)行選擇 監(jiān)測健康狀態(tài) :消費(fèi)者如何獲知提供者的健康狀態(tài) 1.7.2 eureka原理 地址

    2024年02月13日
    瀏覽(18)
  • 詳解SpringCloud微服務(wù)技術(shù)棧:強(qiáng)推!源碼跟蹤分析Ribbon負(fù)載均衡原理、Eureka服務(wù)部署

    詳解SpringCloud微服務(wù)技術(shù)棧:強(qiáng)推!源碼跟蹤分析Ribbon負(fù)載均衡原理、Eureka服務(wù)部署

    ?????作者簡介:一位大四、研0學(xué)生,正在努力準(zhǔn)備大四暑假的實(shí)習(xí) ??上期文章:詳解SpringCloud微服務(wù)技術(shù)棧:認(rèn)識(shí)微服務(wù)、服務(wù)拆分與遠(yuǎn)程調(diào)用 ??訂閱專欄:微服務(wù)技術(shù)全家桶 希望文章對(duì)你們有所幫助 服務(wù)提供者:一次業(yè)務(wù)中,被其它微服務(wù)調(diào)用的服務(wù)(提供接口給

    2024年01月18日
    瀏覽(24)
  • SpringCloud學(xué)習(xí)筆記(上):服務(wù)注冊(cè)與發(fā)現(xiàn):Eureka、Zookeeper、Consul+負(fù)載均衡服務(wù)調(diào)用:Ribbon

    SpringCloud學(xué)習(xí)筆記(上):服務(wù)注冊(cè)與發(fā)現(xiàn):Eureka、Zookeeper、Consul+負(fù)載均衡服務(wù)調(diào)用:Ribbon

    SpringCloud=分布式微服務(wù)架構(gòu)的一站式解決方案,是多種微服務(wù)架構(gòu)落地技術(shù)的集合體,俗稱微服務(wù)全家桶。 springboot版本選擇: git源碼地址:https://github.com/spring-projects/spring-boot/releases/ SpringBoot2.0新特性:https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-2.0-Release springcloud版本選

    2024年02月08日
    瀏覽(23)
  • springcloud五大組件:Eureka:注冊(cè)中心、Zuul:服務(wù)網(wǎng)關(guān)、Ribbon:負(fù)載均衡、Feign:服務(wù)調(diào)用、Hystix:熔斷器

    Eureka是Netflix開發(fā)的服務(wù)發(fā)現(xiàn)框架,本身是一個(gè)基于REST的服務(wù),主要用于定位運(yùn)行在AWS域中的中間層服務(wù),以達(dá)到負(fù)載均衡和中間層服務(wù)故障轉(zhuǎn)移的目的。 SpringCloud將它集成在其子項(xiàng)目spring-cloud-netflix中,以實(shí)現(xiàn)SpringCloud的服務(wù)發(fā)現(xiàn)功能。 Eureka包含兩個(gè)組件:Eureka Server和Eure

    2024年04月10日
    瀏覽(22)
  • [日?qǐng)?bào)] Ribbon、Eureka、Nginx、負(fù)載均衡

    目錄 前言 一、Ribbon和Eureka的關(guān)系 二、Eureka知識(shí)筆記(個(gè)人理解) 三、關(guān)于Ribbon和Nginx的負(fù)載均衡區(qū)別 1、位置工作方式 2、策略 3、集中式與分布式 四、雜項(xiàng) 1、版本問題 2、一些課堂內(nèi)容訂正 3、Spring Cloud生態(tài)給出的替代方案 Spring Cloud LoadBalancer Spring Cloud Consul 完成度比較

    2024年03月18日
    瀏覽(29)
  • SpringCloud(3) Ribbon負(fù)載均衡,負(fù)載均衡策略,自定義負(fù)載均衡

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

    假設(shè)我們有一臺(tái) order-service 訂單服務(wù),兩臺(tái) user-service 用戶服務(wù),當(dāng)訂單服務(wù)需要調(diào)用用戶服務(wù)獲取用戶信息的時(shí)候,應(yīng)該怎么分配調(diào)用哪臺(tái)服務(wù)呢? 這時(shí)候就需要用到 Ribbon 組件了。 首先,我們發(fā)起遠(yuǎn)程調(diào)用的時(shí)候,指定的是需要調(diào)用的服務(wù)名稱,然后我們會(huì)調(diào)用 Ribbon 組

    2024年02月11日
    瀏覽(24)
  • 【SpringCloud】Ribbon負(fù)載均衡

    【SpringCloud】Ribbon負(fù)載均衡

    ??浩澤學(xué)編程 :個(gè)人主頁 ??? 推薦專欄 :《深入淺出SpringBoot》《java對(duì)AI的調(diào)用開發(fā)》 ??????????????《RabbitMQ》《Spring》《SpringMVC》《項(xiàng)目實(shí)戰(zhàn)》 ??學(xué)無止境,不驕不躁,知行合一 在Eureka注冊(cè)中心中我們?cè)谔砑油闌LoadBalanced注解,即可實(shí)現(xiàn)負(fù)載均衡功能,現(xiàn)在一起

    2024年04月17日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包