溫馨提示×

溫馨提示×

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

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

Nacos中注冊中心和配置中心如何實現

發(fā)布時間:2022-08-31 10:22:16 來源:億速云 閱讀:109 作者:iii 欄目:開發(fā)技術

今天小編給大家分享一下Nacos中注冊中心和配置中心如何實現的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

    Spring Cloud Alibaba 是阿里巴巴提供的一站式微服務開發(fā)解決方案,目前已被 Spring Cloud 官方收錄。而 Nacos 作為 Spring Cloud Alibaba 的核心組件之一,提供了兩個非常重要的功能:注冊中心和配置中心。

    1.Nacos 簡介

    Nacos 致力于幫助開發(fā)者發(fā)現、配置和管理微服務。它提供了一組簡單易用的特性集,幫助開發(fā)者快速實現動態(tài)服務發(fā)現、服務配置、服務元數據及流量管理。

    Nacos 特性介紹

    Nacos 具有以下特性:

    • 服務發(fā)現和服務健康監(jiān)測:支持基于DNS和基于RPC的服務發(fā)現,支持對服務的實時的健康檢查,阻止向不健康的主機或服務實例發(fā)送請求。

    • 動態(tài)配置服務:動態(tài)配置服務可以讓您以中心化、外部化和動態(tài)化的方式管理所有環(huán)境的應用配置和服務配置。

    • 動態(tài) DNS 服務:動態(tài) DNS 服務支持權重路由,讓您更容易地實現中間層負載均衡、更靈活的路由策略、流量控制以及數據中心內網的簡單 DNS 解析服務。

    • 服務及其元數據管理:支持從微服務平臺建設的視角管理數據中心的所有服務及元數據。

    2.注冊中心實現

    注冊中心有兩個重要的功能:服務注冊和服務發(fā)現,它解決了微服務集群中,調用者和服務提供者連接管理和請求轉發(fā)的功能,讓程序的開發(fā)者無需過多的關注服務提供者的穩(wěn)定性和健康程度以及調用地址,因為這些都可以依靠 Nacos 進行監(jiān)測、管理和自動轉發(fā)。

    注冊中心中有兩個角色:一個是服務提供者 Provider,另一個是服務調用者 Consumer,接下來我們分別來創(chuàng)建二者。

    2.1 創(chuàng)建服務提供者

    2.1.1 新建項目并添加依賴

    新建一個 Spring Boot 項目,使用阿里云地址 http://start.aliyun.com 來創(chuàng)建 Spring Cloud Alibaba Nacos 項目,如下圖所示:

    Nacos中注冊中心和配置中心如何實現

    點擊 Next 下一步,如下圖所示:

    Nacos中注冊中心和配置中心如何實現

    增加 Nacos Service Discovery 框架支持,如下圖所示:

    Nacos中注冊中心和配置中心如何實現

    對應的依賴框架如下:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

    PS:添加 Spring Web(Spring MVC)框架主要是為了方便后面測試。

    2.1.2 配置 Nacos 連接信息

    在配置文件 application.properties 中要填寫 Nacos 的相關連接信息,具體信息如下:

    # 應用名稱(也是 Nacos 中的服務名)
    spring.application.name=spring-cloud-nacos-producer
    # 應用服務 WEB 訪問端口
    server.port=8082
    # Nacos認證信息
    spring.cloud.nacos.discovery.username=nacos
    spring.cloud.nacos.discovery.password=nacos
    # Nacos 服務發(fā)現與注冊配置,其中子屬性 server-addr 指定 Nacos 服務器主機和端口
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    # 注冊到 nacos 的指定 namespace,默認為 public
    spring.cloud.nacos.discovery.namespace=public

    2.1.3 添加服務提供方法

    新建一個控制器 Controller,添加一個 sayhi 方法,此方法可以使用 HTTP 協(xié)議進行訪問,它是為后面的服務消費者提供的調用方法,具體實現如下:

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @SpringBootApplication
    @RestController
    public class SpringCloudNacosProducerApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringCloudNacosProducerApplication.class, args);
        }
        @RequestMapping("/sayhi/{name}")
        public String sayHi(@PathVariable String name) {
            return "Hi Nacos Discovery " + name;
        }
    }

    編寫完代碼之后,運行項目就可以在 Nacos 的服務列表中看到它了,如下圖所示:

    Nacos中注冊中心和配置中心如何實現

    經過以上步驟,我們的服務提供者就創(chuàng)建好了,接下來我們創(chuàng)建一個服務消費者 Consumer。

    2.2 創(chuàng)建服務消費者

    2.2.1 新建項目并添加依賴

    此步驟和上面的服務提供者類似,也是添加 nacos discovery 和 web 依賴,具體實現如下:

    Nacos中注冊中心和配置中心如何實現

    Nacos中注冊中心和配置中心如何實現

    2.2.2 配置 Nacos 連接信息

    # 應用名稱
    spring.application.name=springcloud-nacos-consumer
    # 應用服務 WEB 訪問端口
    server.port=8082
    # Nacos認證信息
    spring.cloud.nacos.discovery.username=nacos
    spring.cloud.nacos.discovery.password=nacos
    # Nacos 服務發(fā)現與注冊配置,其中子屬性 server-addr 指定 Nacos 服務器主機和端口
    spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
    # 注冊到 nacos 的指定 namespace,默認為 public
    spring.cloud.nacos.discovery.namespace=public

    2.2.3 添加服務調用代碼

    服務消費者的實現有兩個關鍵點,第一,先 new 一個 RestTemplate 對象,此對象是 Spring 框架提供用于進行 HTTP 請求的類,實現代碼如下:

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
    import org.springframework.cloud.client.loadbalancer.LoadBalanced;
    import org.springframework.context.annotation.Bean;
    import org.springframework.web.client.RestTemplate;
    
    @SpringBootApplication
    @EnableDiscoveryClient
    public class SpringcloudNacosConsumerApplication {
        public static void main(String[] args) {
            SpringApplication.run(SpringcloudNacosConsumerApplication.class, args);
        }
        @LoadBalanced
        @Bean
        public RestTemplate restTemplate() {
            // 用于進行 HTTP 請求的對象
            return new RestTemplate();
        }
    }

    第二,新建一個控制器,注入 RestTemplate 對象,并調用 Nacos 中的服務提供者接口,實現代碼如下:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    import org.springframework.web.client.RestTemplate;
    
    @RestController
    public class TestController {
        @Autowired
        private RestTemplate restTemplate;
    
        @RequestMapping("/hi")
        public String hi(String name) {
            // 調用生產者 sayhi 方法,并返回結果
            return restTemplate.getForObject("http://spring-cloud-nacos-producer/sayhi/" + name,
                    String.class);
        }
    }

    其中 spring-cloud-nacos-producer 是服務提供者的 ID,而 sayhi 是服務提供者提供的接口地址。

    通過以上配置,我們的服務消費者也創(chuàng)建好了,啟動項目,執(zhí)行結果如下圖所示:

    Nacos中注冊中心和配置中心如何實現

    從上述結果可以看出,服務消費者通過 Nacos 已經成功調用到服務提供者了,這就是 Nacos 中注冊中心的基本使用。

    3.配置中心實現

    配置中心的作用是將本地配置文件云端話,所謂的云端也就是 Nacos 的服務器端,這樣既能保證配置文件中的敏感數據不會暴露,同時又提供了實時的修改、查看、回滾和動態(tài)刷新配置文件的功能,非常實用。

    但是需要注意的是配置中心和注冊中心的依賴包是不同的,注冊中心的依賴包是 nacos discovery,而配置中心的依賴包是 nacos config,它的具體如下。

    3.1 新建項目并添加依賴

    創(chuàng)建一個 Spring Boot 項目,添加 nacos config 和 web 依賴包,如下圖所示:

    Nacos中注冊中心和配置中心如何實現

    PS:添加 web 依賴主要是為了方便后面測試。

    對應的配置依賴信息如下:

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>

    3.2 配置 Nacos Config 信息

    在應用的 /src/main/resources/ 目錄下,創(chuàng)建引導配置文件 bootstrap.yml(或 bootstrap.properties),添加以下 Nacos Config 配置:

    spring:
      application:
        name: nacosconfig # 項目名稱和 nacos DataId 相匹配
      cloud:
        nacos:
          config:
            server-addr: 127.0.0.1:8848 # nacos 地址和端口
            file-extension: yaml # 獲取配置文件的格式:yaml
            username: nacos # nacos 認證用戶名
            password: nacos # nacos 認證密碼
    server:
      port: 9001 # 項目啟動端口

    3.3 編寫代碼讀取配置文件

    新建控制器,使用 @Value 注解讀取配置信息,實現代碼如下:

    import org.springframework.beans.factory.annotation.Value;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class TestController {
        // 從 nacos 中讀取配置項 config.info
        @Value("${config.info}")
        private String configInfo;
    
        @GetMapping("/getconfig")
        public String getConfigInfo(){
            return configInfo;
        }
    }

    3.4 Nacos 控制臺添加配置信息

    在 Nacos 控制臺創(chuàng)建并設置配置文件,執(zhí)行步驟如下所示。

    首先,在配置列表中點擊“添加”按鈕,如下圖所示:

    Nacos中注冊中心和配置中心如何實現

    進入配置頁面,新建 YAML 或 Properties 配置文件,如下圖所示:

    Nacos中注冊中心和配置中心如何實現

    以上關鍵參數的含義和規(guī)則說明如下。

    3.4.1 Data ID

    Data ID 的拼接格式如下:

    ${prefix} - ${spring.profiles.active} . ${file-extension}

    其中

    • prefix 默認為 spring.application.name 的值,也可以通過配置項 spring.cloud.nacos.config.prefix 來配置。

    • spring.profiles.active 即為當前環(huán)境對應的 profile,當 active profile 為空時,對應的連接符 - 也將不存在,dataId 的拼接格式變成 ${prefix}.${file-extension}

    • file-extension 為配置內容的數據格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置。目前只支持 properties 類型。

    3.4.2 Group

    Group 分組選項,主要是用來隔離不同的配置項目的,它的默認值為 DEFAULT_GROUP,可以通過 spring.cloud.nacos.config.group 配置。

    配置好相應的內容之后,點擊底部的“發(fā)布”按鈕即可,添加成功之后會自動返回配置列表,如下圖所示:

    Nacos中注冊中心和配置中心如何實現

    經過以上步驟,Nacos 配置中心的功能就實現完了,接下來啟動項目,程序的執(zhí)行結果如下圖所示:

    Nacos中注冊中心和配置中心如何實現

    3.5 動態(tài)刷新功能

    動態(tài)刷新功能是指,在 Nacos 配置中心修改了配置文件,在不重啟項目的前提下,可以實時讀取到最新的配置內置。

    Nacos 默認會為所有獲取數據成功的 Nacos 的配置項添加了監(jiān)聽功能,在監(jiān)聽到服務端配置發(fā)生變化時會實時觸發(fā) org.springframework.cloud.context.refresh.ContextRefresher 的 refresh 方法。

    如果需要對 Bean 進行動態(tài)刷新,需要參照 Spring 和 Spring Cloud 規(guī)范,推薦給類添加 @RefreshScope 或 @ConfigurationProperties 注解,就可以實現配置中心的動態(tài)刷新功能了。

    以上就是“Nacos中注冊中心和配置中心如何實現”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業(yè)資訊頻道。

    向AI問一下細節(jié)

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

    AI