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

Spring Cloud Alibaba-02-Nacos Discovery服務(wù)治理及負(fù)載均衡

這篇具有很好參考價(jià)值的文章主要介紹了Spring Cloud Alibaba-02-Nacos Discovery服務(wù)治理及負(fù)載均衡。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Lison <dreamlison@163.com>, v1.0.0, 2023.05.10

Spring Cloud Alibaba-02-Nacos Discovery服務(wù)治理及負(fù)載均衡

服務(wù)治理介紹

先來思考一個(gè)問題

通過上一章的操作,我們已經(jīng)可以實(shí)現(xiàn)微服務(wù)之間的調(diào)用。但是我們把服務(wù)提供者的網(wǎng)絡(luò)地址 (ip,端口)等硬編碼到了代碼中,這種做法存在許多問題:

一旦服務(wù)提供者地址變化,就需要手工修改代碼

一旦是多個(gè)服務(wù)提供者,無法實(shí)現(xiàn)負(fù)載均衡功能

一旦服務(wù)變得越來越多,人工維護(hù)調(diào)用關(guān)系困難

那么應(yīng)該怎么解決呢, 這時(shí)候就需要通過注冊中心動(dòng)態(tài)的實(shí)現(xiàn)服務(wù)治理。

什么是服務(wù)治理

服務(wù)治理是微服務(wù)架構(gòu)中最核心最基本的模塊。用于實(shí)現(xiàn)各個(gè)微服務(wù)的自動(dòng)化注冊與發(fā)現(xiàn)。

服務(wù)注冊:在服務(wù)治理框架中,都會構(gòu)建一個(gè)注冊中心,每個(gè)服務(wù)單元向注冊中心登記自己提供服務(wù)的詳細(xì)信息。并在注冊中心形成一張服務(wù)的清單,服務(wù)注冊中心需要以心跳的方式去監(jiān)測清單中的服務(wù)是否可用,如果不可用,需要在服務(wù)清單中剔除不可用的服務(wù)。

服務(wù)發(fā)現(xiàn):服務(wù)調(diào)用方向服務(wù)注冊中心咨詢服務(wù),并獲取所有服務(wù)的實(shí)例清單,實(shí)現(xiàn)對具體服務(wù)實(shí)例的訪問

Spring Cloud Alibaba-02-Nacos Discovery服務(wù)治理及負(fù)載均衡,# Spring Cloud Alibaba,負(fù)載均衡,java,微服務(wù)

通過上面的調(diào)用圖會發(fā)現(xiàn),除了微服務(wù),還有一個(gè)組件是服務(wù)注冊中心,它是微服務(wù)架構(gòu)非常重要 的一個(gè)組件,在微服務(wù)架構(gòu)里主要起到了協(xié)調(diào)者的一個(gè)作用。注冊中心一般包含如下幾個(gè)功能:

  1. 服務(wù)發(fā)現(xiàn):
    服務(wù)注冊:保存服務(wù)提供者和服務(wù)調(diào)用者的信息
    服務(wù)訂閱:服務(wù)調(diào)用者訂閱服務(wù)提供者的信息,注冊中心向訂閱者推送提供者的信息
  2. 服務(wù)配置:
    配置訂閱:服務(wù)提供者和服務(wù)調(diào)用者訂閱微服務(wù)相關(guān)的配置
    配置下發(fā):主動(dòng)將配置推送給服務(wù)提供者和服務(wù)調(diào)用者
  3. 服務(wù)健康檢測:
    檢測服務(wù)提供者的健康情況,如果發(fā)現(xiàn)異常,執(zhí)行服務(wù)剔除

常見的注冊中心

Zookeeper

zookeeper是一個(gè)分布式服務(wù)框架,是Apache Hadoop 的一個(gè)子項(xiàng)目,它主要是用來解決分布式 應(yīng)用中經(jīng)常遇到的一些數(shù)據(jù)管理問題,如:統(tǒng)一命名服務(wù)、狀態(tài)同步服務(wù)、集群管理、分布式應(yīng)用 配置項(xiàng)的管理等。

Eureka

Eureka是Springcloud Netflix中的重要組件,主要作用就是做服務(wù)注冊和發(fā)現(xiàn)。但是現(xiàn)在已經(jīng)閉 源

Consul

Consul是基于GO語言開發(fā)的開源工具,主要面向分布式,服務(wù)化的系統(tǒng)提供服務(wù)注冊、服務(wù)發(fā)現(xiàn) 和配置管理的功能。Consul的功能都很實(shí)用,其中包括:服務(wù)注冊/發(fā)現(xiàn)、健康檢查、Key/Value 存儲、多數(shù)據(jù)中心和分布式一致性保證等特性。Consul本身只是一個(gè)二進(jìn)制的可執(zhí)行文件,所以 安裝和部署都非常簡單,只需要從官網(wǎng)下載后,在執(zhí)行對應(yīng)的啟動(dòng)腳本即可。

Nacos

Nacos是一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺。它是 Spring Cloud Alibaba 組件之一,負(fù)責(zé)服務(wù)注冊發(fā)現(xiàn)和服務(wù)配置,可以這樣認(rèn)為nacos=eureka+config。

Nacos介紹

  • Nacos是SpringCloudAlibaba架構(gòu)中最重要的組件。
  • Nacos 是一個(gè)更易于幫助構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置和服務(wù)管理平臺,提供注冊中心、配置中心和動(dòng)態(tài) DNS 服務(wù)三大功能。能夠無縫對接Springcloud、Spring、Dubbo等流行框架。
  • nacos和eureka功能對比
功能模塊 Nacos Eureka 功能說明
注冊中心 服務(wù)治理,服務(wù)中心化注冊
配置中心 × eureka需要配合springcloud config實(shí)現(xiàn)
配置動(dòng)態(tài)刷新 × nacos通過netty保持tcp長鏈接進(jìn)行推送,eureka需要配合mq實(shí)現(xiàn)配置動(dòng)態(tài)
可用區(qū)az 對服務(wù)集群劃分不同區(qū)域,實(shí)現(xiàn)區(qū)域隔離,并提供災(zāi)難級自動(dòng)切換
分組 × nacos根據(jù)不同的業(yè)務(wù)、環(huán)境進(jìn)行分組管理(namespace,group
元數(shù)據(jù) 提供服務(wù)標(biāo)簽數(shù)據(jù)(環(huán)境、服務(wù)標(biāo)識)
權(quán)重 × nacos提供權(quán)重設(shè)置,調(diào)整承載流量壓力
健康檢查 nacos提供服務(wù)端或者客戶端發(fā)起的健康監(jiān)測,eureka是有客戶端發(fā)起心跳
負(fù)載均衡 均提供負(fù)載均衡策略,eureka采用ribbon
  • nacos支持a(高可用)p(分區(qū)容錯(cuò))和c(一致性)p的切換默認(rèn)為ap, eureka僅支持ap,zookeeper僅支持c

nacos能做什么?

  • 服務(wù)注冊發(fā)現(xiàn)和服務(wù)健康監(jiān)測:Nacos支持基于DNS和基于RPC的服務(wù)發(fā)現(xiàn),服務(wù)端可以通過SDK或者Api進(jìn)行服務(wù)注冊,相應(yīng)的服務(wù)消費(fèi)者可以使用DNS或者Http查找的方式獲取服務(wù)列表。Nacos同時(shí)提供對服務(wù)的實(shí)時(shí)健康檢查,阻止想不健康的主機(jī)或服務(wù)發(fā)送請求,與Eureka類似Nacos也有友好的控制臺界面。
  • 動(dòng)態(tài)DNS服務(wù):支持權(quán)重路由,更容易地實(shí)現(xiàn)中間層負(fù)載均衡、更靈活的路由策略、流量控制以及數(shù)據(jù)中心內(nèi)網(wǎng)的簡單DNS解析服務(wù)。
  • 動(dòng)態(tài)配置服務(wù):接觸過SpringCloud應(yīng)該對config有所了解,那么配置中心也就很好理解,Nacos支持動(dòng)態(tài)的配置管理,將服務(wù)的配置信息分環(huán)境分類別外部管理,并且支持熱更新。不過與Config不同Nacos的配置信息存儲與數(shù)據(jù)庫中,支持配置信息的監(jiān)聽和版本回滾。
  • 服務(wù)及元數(shù)據(jù)管理:Nacos 能讓您從微服務(wù)平臺建設(shè)的視角管理數(shù)據(jù)中心的所有服務(wù)及元數(shù)據(jù),包括管理服務(wù)的描述、生命周期、服務(wù)的靜態(tài)依賴分析、服務(wù)的健康狀態(tài)、服務(wù)的流量管理、路由及安全策略、服務(wù)的 SLA (服務(wù)等級協(xié)議)以及最首要的 metrics 統(tǒng)計(jì)數(shù)據(jù)(默認(rèn)不開啟暴露需要修改配置)??梢源罱ù罱╬rometheus采集Nacos metrics數(shù)據(jù)也可以搭建搭建grafana圖形化展示metrics數(shù)據(jù)

Nacos下載安裝

**官網(wǎng)網(wǎng)址:**https://nacos.io/zh-cn/index.html

Spring Cloud Alibaba-02-Nacos Discovery服務(wù)治理及負(fù)載均衡,# Spring Cloud Alibaba,負(fù)載均衡,java,微服務(wù)

官網(wǎng)文檔網(wǎng)址:https://nacos.io/zh-cn/docs/quick-start.html

**注意:**使用官網(wǎng)推薦的穩(wěn)定版本:下載地址:https://github.com/alibaba/nacos/releases

Spring Cloud Alibaba-02-Nacos Discovery服務(wù)治理及負(fù)載均衡,# Spring Cloud Alibaba,負(fù)載均衡,java,微服務(wù)

執(zhí)行命令

Linux/Unix/Mac

啟動(dòng)命令(standalone代表著單機(jī)模式運(yùn)行,非集群模式):

sh startup.sh -m standalone

Windows

啟動(dòng)命令(standalone代表著單機(jī)模式運(yùn)行,非集群模式):

startup.cmd -m standalone

執(zhí)行結(jié)果

Spring Cloud Alibaba-02-Nacos Discovery服務(wù)治理及負(fù)載均衡,# Spring Cloud Alibaba,負(fù)載均衡,java,微服務(wù)

驗(yàn)證

得到結(jié)果以后為了驗(yàn)證是否成功開啟Nacos,我們需要訪問:http://localhost:8848/nacos
Spring Cloud Alibaba-02-Nacos Discovery服務(wù)治理及負(fù)載均衡,# Spring Cloud Alibaba,負(fù)載均衡,java,微服務(wù)

出現(xiàn)此界面表示已經(jīng)成功啟動(dòng)Nacos,默認(rèn)的賬號密碼是:nacos/nacos
Spring Cloud Alibaba-02-Nacos Discovery服務(wù)治理及負(fù)載均衡,# Spring Cloud Alibaba,負(fù)載均衡,java,微服務(wù)

引入Nacos Discovery進(jìn)行服務(wù)注冊/發(fā)現(xiàn)

服務(wù)發(fā)現(xiàn)是微服務(wù)架構(gòu)中的關(guān)鍵組件之一。在這樣的架構(gòu)中,手動(dòng)為每個(gè)客戶端配置服務(wù)列表可能是一項(xiàng)艱巨的任務(wù),并且使得動(dòng)態(tài)擴(kuò)展極其困難。Nacos Discovery 幫助您自動(dòng)將您的服務(wù)注冊到 Nacos 服務(wù)器,Nacos 服務(wù)器會跟蹤服務(wù)并動(dòng)態(tài)刷新服務(wù)列表。此外,Nacos Discovery 將服務(wù)實(shí)例的一些元數(shù)據(jù),如主機(jī)、端口、健康檢查 URL、主頁等注冊到 Nacos。

學(xué)習(xí)任何知識我們都需要從它的官方文檔入手,所以我們直接來看官網(wǎng)給我們提供的文檔:https://spring.io/projects/spring-cloud-alibaba#learn

創(chuàng)建新項(xiàng)目

聚合項(xiàng)目:由于聚合帶來的諸多好處,在SpringBoot項(xiàng)目開發(fā)中也廣泛采用,開發(fā)中將SpringBoot項(xiàng)目按照功能分成子模塊開發(fā),所以我們在使用Spring Cloud Alibaba完成項(xiàng)目的時(shí)候,也是采用聚合項(xiàng)目來完成。

父項(xiàng)目pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>


    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.13.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.lison</groupId>
    <artifactId>spring-cloud-alibaba-building</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>pom</packaging>


    <properties>
        <java.version>17</java.version>
        <lison.project.version>1.0.0-SNAPSHOT</lison.project.version>
        <maven.plugin.version>3.8.1</maven.plugin.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-cloud-alibaba-version>2.2.5.RELEASE</spring-cloud-alibaba-version>
    </properties>

    <modules>
        <module>spring-boot-building</module>
    </modules>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>${spring-cloud-alibaba-version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

子項(xiàng)目pom

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.lison</groupId>
        <artifactId>spring-cloud-alibaba-building</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.lison</groupId>
    <artifactId>spring-boot-building</artifactId>
    <version>${lison.project.version}</version>
    <name>${project.artifactId}</name>
    <packaging>jar</packaging>
    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>

</project>

子項(xiàng)目yml

server:
  port: 18000
spring:
  application:
    name: spring-boot-building

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

management:
  endpoint:
    web:
      exposure:
        include:'*'

啟動(dòng)類

package com.lison.springbootbuilding;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class SpringBootBuildingApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootBuildingApplication.class, args);
    }

}

測試

注意,在啟動(dòng)項(xiàng)目前一定要啟動(dòng)Nacos
Spring Cloud Alibaba-02-Nacos Discovery服務(wù)治理及負(fù)載均衡,# Spring Cloud Alibaba,負(fù)載均衡,java,微服務(wù)

Nacos服務(wù)消費(fèi)者和負(fù)載均衡

什么是負(fù)載均衡

通俗的講, 負(fù)載均衡就是將負(fù)載(工作任務(wù),訪問請求)進(jìn)行分?jǐn)偟蕉鄠€(gè)操作單元(服務(wù)器,組件)上進(jìn)行執(zhí)行。
根據(jù)負(fù)載均衡發(fā)生位置的不同,一般分為服務(wù)端負(fù)載均衡和客戶端負(fù)載均衡。 服務(wù)端負(fù)載均衡指的是發(fā)生在服務(wù)提供者一方,比如常見的nginx負(fù)載均衡而客戶端負(fù)載均衡指的是發(fā)生在服務(wù)請求的一方,也就是在發(fā)送請求之前已經(jīng)選好了由哪個(gè)實(shí)例處理請求。

Spring Cloud Alibaba-02-Nacos Discovery服務(wù)治理及負(fù)載均衡,# Spring Cloud Alibaba,負(fù)載均衡,java,微服務(wù)

我們在微服務(wù)調(diào)用關(guān)系中一般會選擇客戶端負(fù)載均衡,也就是在服務(wù)調(diào)用的一方來決定服務(wù)由哪個(gè)提供者執(zhí)行

負(fù)載均衡

創(chuàng)建一個(gè)spring-cloud-service 服務(wù)

pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com.lison</groupId>
        <artifactId>spring-cloud-alibaba-building</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.lison</groupId>
    <artifactId>spring-cloud-service</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>spring-cloud-service</name>
    <description>spring-cloud-service</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- Nacos -->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>



    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <!--suppress UnresolvedMavenProperty -->
                                <copy overwrite="true"
                                      tofile="${session.executionRootDirectory}/target/${project.artifactId}.jar"
                                      file="${project.build.directory}/${project.artifactId}.jar" />
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

yml配置

server:
  port: 18001
spring:
  application:
    name: spring-cloud-service

  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

management:
  endpoint:
    web:
      exposure:
        include:'*'

啟動(dòng)類

package com.lison.springcloudservice;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;

@SpringBootApplication
@EnableDiscoveryClient
public class SpringCloudServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringCloudServiceApplication.class, args);
    }

}

接下來開始修改 spring-cloud-service模塊的代碼, 將其注冊到nacos服務(wù)上
Spring Cloud Alibaba-02-Nacos Discovery服務(wù)治理及負(fù)載均衡,# Spring Cloud Alibaba,負(fù)載均衡,java,微服務(wù)

基于Ribbon實(shí)現(xiàn)負(fù)載均衡

Ribbon是Spring Cloud的一個(gè)組件, 它可以讓我們使用一個(gè)注解就能輕松的搞定負(fù)載均衡

1、在RestTemplate 的生成方法上添加@LoadBalanced注解

@Bean
@LoadBalanced
public RestTemplate restTemplate() {
    return new RestTemplate();
}

2、修改服務(wù)調(diào)用的方法

@RestController
public class TestController {
    @Autowired
    private RestTemplate restTemplate;

    @GetMapping(value = "/naocs/consumer")
    public String getServerPort(){

        return restTemplate.getForObject( "http://spring-cloud-service/getServerProd",String.class);

    }
}

3、通過idea再啟動(dòng)一個(gè) spring-cloud-service 微服務(wù),設(shè)置其端口為18011
Spring Cloud Alibaba-02-Nacos Discovery服務(wù)治理及負(fù)載均衡,# Spring Cloud Alibaba,負(fù)載均衡,java,微服務(wù)

4、通過nacos查看微服務(wù)的啟動(dòng)情況

Spring Cloud Alibaba-02-Nacos Discovery服務(wù)治理及負(fù)載均衡,# Spring Cloud Alibaba,負(fù)載均衡,java,微服務(wù)

Ribbon支持的負(fù)載均衡策略

Ribbon內(nèi)置了多種負(fù)載均衡策略,內(nèi)部負(fù)載均衡的頂級接口為 com.netflix.loadbalancer.IRule , 具體的負(fù)載策略如下圖所示:

策略名 策略描述 實(shí)現(xiàn)說明
BestAvailableRule 選擇一個(gè)最小的并發(fā) 請求的server 逐個(gè)考察Server,如果Server被 tripped了,則忽略,在選擇其中 ActiveRequestsCount最小的serve
AvailabilityFilteringRule 過濾掉那些因?yàn)橐恢?連接失敗的被標(biāo)記為 circuit tripped的后 端server,并過濾掉 那些高并發(fā)的的后端 server(active connections 超過配 置的閾值) 使用一個(gè)AvailabilityPredicate來包含 過濾server的邏輯,其實(shí)就就是檢查 status里記錄的各個(gè)server的運(yùn)行狀態(tài)
WeightedResponseTimeRule 根據(jù)相應(yīng)時(shí)間分配一 個(gè)weight,相應(yīng)時(shí) 間越長,weight越 小,被選中的可能性 越低。 一個(gè)后臺線程定期的從status里面讀 取評價(jià)響應(yīng)時(shí)間,為每個(gè)server計(jì)算 一個(gè)weight。Weight的計(jì)算也比較簡 單responsetime 減去每個(gè)server自己 平均的responsetime是server的權(quán) 重。當(dāng)剛開始運(yùn)行,沒有形成statas 時(shí),使用roubine策略選擇server。
RetryRule 對選定的負(fù)載均衡策略機(jī)上重試機(jī)制。 在一個(gè)配置時(shí)間段內(nèi)當(dāng)選擇server不 成功,則一直嘗試使用subRule的方 式選擇一個(gè)可用的server
RoundRobinRule 輪詢方式輪詢選擇 server 輪詢index,選擇index對應(yīng)位置的 server
RandomRule 隨機(jī)選擇一個(gè)server 在index上隨機(jī),選擇index對應(yīng)位置 的server
ZoneAvoidanceRule 復(fù)合判斷server所在 區(qū)域的性能和server 的可用性選擇server 使用ZoneAvoidancePredicate和 AvailabilityPredicate來判斷是否選擇 某個(gè)server,前一個(gè)判斷判定一個(gè) zone的運(yùn)行性能是否可用,剔除不可 用的zone(的所有server), AvailabilityPredicate用于過濾掉連接 數(shù)過多的Server。

我們可以通過修改配置來調(diào)整Ribbon的負(fù)載均衡策略,具體代碼如下:

spring-cloud-service: # 調(diào)用的提供者的名稱 
	ribbon: 
   		NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule


基于Feign實(shí)現(xiàn)服務(wù)調(diào)用

什么是Feign

Feign是Spring Cloud提供的一個(gè)聲明式的偽Http客戶端, 它使得調(diào)用遠(yuǎn)程服務(wù)就像調(diào)用本地服務(wù) 一樣簡單, 只需要?jiǎng)?chuàng)建一個(gè)接口并添加一個(gè)注解即可。

Nacos很好的兼容了Feign, Feign默認(rèn)集成了 Ribbon, 所以在Nacos下使用Fegin默認(rèn)就實(shí)現(xiàn)了負(fù) 載均衡的效果。

Feign的使用

1、加入Feign依賴

<!--fegin組件--> 
<dependency> 
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
</dependency>

2、在主類上添加Fegin的注解

@SpringBootApplication 
@EnableDiscoveryClient 
@EnableFeignClients
//開啟Fegin

3創(chuàng)建一個(gè)service, 并使用Fegin實(shí)現(xiàn)微服務(wù)調(diào)用

@FeignClient("spring-cloud-service")
public interface ITestService {
    //指定調(diào)用提供者的哪個(gè)方法
    @GetMapping(value = "/getServerProd")
    String getServerPort();
}

4、修改controller代碼,并啟動(dòng)驗(yàn)證

@RestController
public class TestController {
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private ITestService iTestService;

    @GetMapping(value = "/naocs/consumer")
    public String getServerPort(){

        return iTestService.getServerPort();

    }
}

5、重啟buding微服務(wù),訪問:http://127.0.0.1:18000/naocs/consumer 查看效果文章來源地址http://www.zghlxwxcb.cn/news/detail-834877.html

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

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

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

相關(guān)文章

  • Spring Cloud Alibaba--Nacos服務(wù)注冊和配置中心

    Spring Cloud Alibaba--Nacos服務(wù)注冊和配置中心

    Nacos 是Dynamic Naming and Configuration Service的首字母簡稱,一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺。 Nacos的特性,官網(wǎng)解釋如下: 服務(wù)發(fā)現(xiàn)和服務(wù)健康監(jiān)測 Nacos 支持基于 DNS 和基于 RPC 的服務(wù)發(fā)現(xiàn)。服務(wù)提供者使用 原生SDK、OpenAPI、或一個(gè)獨(dú)立的Age

    2024年02月05日
    瀏覽(117)
  • 【springcloud 微服務(wù)】Spring Cloud Alibaba Nacos使用詳解

    目錄 一、前言 二、nacos介紹 2.1??什么是 Nacos 2.2 nacos 核心能力 2.2.1 服務(wù)發(fā)現(xiàn)和服務(wù)健康監(jiān)測

    2024年01月22日
    瀏覽(26)
  • 【Spring Cloud Alibaba】2.服務(wù)注冊與發(fā)現(xiàn)(Nacos安裝)

    【Spring Cloud Alibaba】2.服務(wù)注冊與發(fā)現(xiàn)(Nacos安裝)

    我們要搭建一個(gè) Spring Cloud Alibaba 項(xiàng)目就繞不開 Nacos ,阿里巴巴提供的 Nacos 組件,可以提供服務(wù)注冊與發(fā)現(xiàn)和分布式配置服務(wù),擁有著淘寶雙十一十幾年的流量經(jīng)驗(yàn),還是非常的可靠的。 Nacos 依賴 Java 環(huán)境來運(yùn)行。如果您是從代碼開始構(gòu)建并運(yùn)行Nacos,還需要為此配置 Maven環(huán)

    2024年01月23日
    瀏覽(23)
  • day10-Spring Cloud Alibaba Nacos-服務(wù)注冊與配置中心

    官網(wǎng):https://github.com/alibaba/nacos,Nacos官方中文手冊 Nacos:Spring Cloud Alibaba服務(wù)注冊與配置中心(非常詳細(xì)) (biancheng.net) Spring Cloud Alibaba系列-一文讀懂Nacos原理 - 掘金 (juejin.cn) Nacos /nɑ:k??s/ 是 Dynamic Naming and Configuration Service的首字母簡稱,一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服

    2024年02月08日
    瀏覽(121)
  • 神領(lǐng)物流 day02-網(wǎng)關(guān)與支付 Spring Cloud Alibaba 微服務(wù)

    神領(lǐng)物流 day02-網(wǎng)關(guān)與支付 Spring Cloud Alibaba 微服務(wù)

    單token存在的問題 雙token三驗(yàn)證 用戶端token校驗(yàn)與鑒權(quán) 對接三方支付平臺 分布式鎖 新入職的你加入了開發(fā)一組,也接到了開發(fā)任務(wù),并且你也順利的修復(fù)了bug,完成了快遞員、司機(jī)的鑒權(quán),現(xiàn)在的你已經(jīng)對項(xiàng)目的業(yè)務(wù)功能、開發(fā)環(huán)境以及網(wǎng)關(guān)代碼設(shè)計(jì)都有了一定的了解,但

    2024年01月15日
    瀏覽(20)
  • Spring Cloud Alibaba 微服務(wù)1,系統(tǒng)架構(gòu)演變 + Nginx反向代理與負(fù)載均衡

    Spring Cloud Alibaba 微服務(wù)1,系統(tǒng)架構(gòu)演變 + Nginx反向代理與負(fù)載均衡

    ??作者簡介: 哪吒 ,CSDN2022博客之星Top1、CSDN2021博客之星Top2、多屆新星計(jì)劃導(dǎo)師?、博客專家?? , 專注Java硬核干貨分享,立志做到Java賽道全網(wǎng)Top N。 ??本文收錄于 Java基礎(chǔ)教程系列(進(jìn)階篇) ,本專欄是針對大學(xué)生、初級Java工程師精心打造, 針對Java生態(tài),逐個(gè)擊破,

    2024年02月02日
    瀏覽(103)
  • Spring Cloud Alibaba 微服務(wù)2,注冊中心演變 + Nacos注冊中心與配置中心

    Spring Cloud Alibaba 微服務(wù)2,注冊中心演變 + Nacos注冊中心與配置中心

    ??作者簡介: 哪吒 ,CSDN2022博客之星Top1、CSDN2021博客之星Top2、多屆新星計(jì)劃導(dǎo)師?、博客專家?? , 專注Java硬核干貨分享,立志做到Java賽道全網(wǎng)Top N。 ??本文收錄于 Java基礎(chǔ)教程系列(進(jìn)階篇) ,本專欄是針對大學(xué)生、初級Java工程師精心打造, 針對Java生態(tài),逐個(gè)擊破,

    2024年02月02日
    瀏覽(1681)
  • 從0到1搭建spring cloud alibaba +springboot+nacos+dubbo微服務(wù)

    從0到1搭建spring cloud alibaba +springboot+nacos+dubbo微服務(wù)

    ? 由以上版本對應(yīng)關(guān)系: ????????springboot版本:2.3.2.RELEASE ? ? ? ? spring cloud 版本選擇:Hoxton.SR9 ? ? ? ? spring cloud alibaba版本選擇:2.2.6.RELEASE 父工程的父工程:() ?版本依賴關(guān)系: ???????? ? 其他業(yè)務(wù)模塊依賴: 使用nacos做配置中心和注冊中心+dubbo做RPC調(diào)用 配置文

    2024年02月11日
    瀏覽(35)
  • Spring Cloud Alibaba全家桶(三)——微服務(wù)負(fù)載均衡器Ribbon與LoadBalancer

    Spring Cloud Alibaba全家桶(三)——微服務(wù)負(fù)載均衡器Ribbon與LoadBalancer

    本文為 微服務(wù)負(fù)載均衡器Ribbon與LoadBalancer 相關(guān)知識,下邊將對 什么是Ribbon (包括: 客戶端的負(fù)載均衡 、 服務(wù)端的負(fù)載均衡 、 常見負(fù)載均衡算法 ), Nacos使用Ribbon , Ribbon內(nèi)核原理 (包括: Ribbon原理 , Ribbon負(fù)載均衡策略 , 饑餓加載 ), Spring Cloud LoadBalancer (包括:

    2024年02月02日
    瀏覽(31)
  • Spring Cloud Alibaba【什么是Nacos、Nacos Server下載安裝 、Docker安裝Nacos Server服務(wù)、微服務(wù)聚合父工程構(gòu)建】(一)

    Spring Cloud Alibaba【什么是Nacos、Nacos Server下載安裝 、Docker安裝Nacos Server服務(wù)、微服務(wù)聚合父工程構(gòu)建】(一)

    ?? 目錄 Spring Cloud Alibaba簡介 Spring Cloud Alibaba版本與兼容性? ?分布式服務(wù)治理_什么是Nacos 分布式服務(wù)治理_Nacos Server下載安裝? ?分布式服務(wù)治理_Docker安裝Nacos Server服務(wù) 分布式服務(wù)治理_微服務(wù)聚合父工程構(gòu)建 ?什么是Spring Cloud Alibaba Spring Cloud Alibaba致力于提供微服務(wù)開發(fā)的

    2024年02月17日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包