Nacos 入門學習指南

Nacos 是什么?

https://nacos.io/zh-cn/docs/what-is-nacos.html

  • 本文基于: Nacos 1.4.0

  • 官方介紹

    Nacos 致力于幫助您發(fā)現(xiàn)炮温、配置和管理微服務(wù)霎槐。Nacos 提供了一組簡單易用的特性集,幫助您快速實現(xiàn)動態(tài)服務(wù)發(fā)現(xiàn)笤受、服務(wù)配置犯戏、服務(wù)元數(shù)據(jù)及流量管理椒涯。

    Nacos 幫助您更敏捷和容易地構(gòu)建垂蜗、交付和管理微服務(wù)平臺伟墙。 Nacos 是構(gòu)建以“服務(wù)”為中心的現(xiàn)代應(yīng)用架構(gòu) (例如微服務(wù)范式、云原生范式) 的服務(wù)基礎(chǔ)設(shè)施手素。

  • 核心特點: 既可以是注冊中心也可以是配置中心

  • 服務(wù)是一等公民

    • 服務(wù)(Service)是 Nacos 世界的一等公民吕喘。Nacos 支持幾乎所有主流類型的“服務(wù)”的發(fā)現(xiàn)、配置和管理:

      • Kubernetes Service

      • gRPC & Dubbo RPC Service

      • Spring Cloud RESTful Service

  • Nacos 的關(guān)鍵特性包括:

    • 服務(wù)發(fā)現(xiàn)

      • 默認支持服務(wù)健康監(jiān)測
      • Nacos 支持基于 DNS 和基于 RPC 的服務(wù)發(fā)現(xiàn)
    • 配置中心

      • 默認支持動態(tài)配置刷新功能,無需額外配置

        • 在Nacos控制臺修改了配置后,點擊發(fā)布時,會自動通知Nacos客戶端更新本地緩存的配置文件刑桑。如果客戶端的某個變量值就來自配置文件那么可以結(jié)合 @RefreshScope 注解實現(xiàn)變量值的更新。
      • 動態(tài)配置服務(wù)可以讓您以中心化募舟、外部化和動態(tài)化的方式管理所有環(huán)境的應(yīng)用配置和服務(wù)配置祠斧。

      • 動態(tài)配置消除了配置變更時重新部署應(yīng)用和服務(wù)的需要,讓配置管理變得更加高效和敏捷拱礁。

      • 配置中心化管理讓實現(xiàn)無狀態(tài)服務(wù)變得更簡單琢锋,讓服務(wù)按需彈性擴展變得更容易。

      • Nacos 提供了一個簡潔易用的UI (控制臺樣例 Demo) 幫助您管理所有的服務(wù)和應(yīng)用的配置呢灶。

      • Nacos 還提供包括配置版本跟蹤吴超、金絲雀發(fā)布、一鍵回滾配置以及客戶端配置更新狀態(tài)跟蹤在內(nèi)的一系列開箱即用的配置管理特性鸯乃,幫助您更安全地在生產(chǎn)環(huán)境中管理配置變更和降低配置變更帶來的風險鲸阻。

        • NACOS server 會記錄配置文件的歷史版本,保留30天缨睡,同時還貼心的提供了一鍵回滾功能鸟悴,回滾操作將會觸發(fā)配置更新。
      • 配置快照(本地)

        Nacos 的客戶端 SDK 會在本地生成配置的快照奖年。當客戶端無法連接到 Nacos Server 時细诸,可以使用配置快照顯示系統(tǒng)的整體容災(zāi)能力。

    • 動態(tài) DNS 服務(wù)

      動態(tài) DNS 服務(wù)支持權(quán)重路由陋守,讓您更容易地實現(xiàn)中間層負載均衡震贵、更靈活的路由策略、流量控制以及數(shù)據(jù)中心內(nèi)網(wǎng)的簡單DNS解析服務(wù)水评。動態(tài)DNS服務(wù)還能讓您更容易地實現(xiàn)以 DNS 協(xié)議為基礎(chǔ)的服務(wù)發(fā)現(xiàn)猩系,以幫助您消除耦合到廠商私有服務(wù)發(fā)現(xiàn) API 上的風險。

      Nacos 提供了一些簡單的 DNS APIs TODO 幫助您管理服務(wù)的關(guān)聯(lián)域名和可用的 IP:PORT 列表.

    • 服務(wù)及其元數(shù)據(jù)管理

      Nacos 能讓您從微服務(wù)平臺建設(shè)的視角管理數(shù)據(jù)中心的所有服務(wù)及元數(shù)據(jù)之碗,包括管理服務(wù)的描述蝙眶、生命周期、服務(wù)的靜態(tài)依賴分析、服務(wù)的健康狀態(tài)幽纷、服務(wù)的流量管理式塌、路由及安全策略、服務(wù)的 SLA 以及最首要的 metrics 統(tǒng)計數(shù)據(jù)友浸。

  • Nacos 地圖

    https://nacos.io/img/nacosMap.jpg

  • Nacos 概念

    https://nacos.io/zh-cn/docs/concepts.html

  • Nacos 架構(gòu)

    https://nacos.io/zh-cn/docs/architecture.html

怎么用?

2.1 快速開始 - 安裝 Nacos Server

https://nacos.io/zh-cn/docs/quick-start.html

下載源碼或者安裝包

你可以通過源碼和發(fā)行包兩種方式來獲取 Nacos。

  • 從 Github 上下載源碼方式

    git clone https://github.com/alibaba/nacos.git
    cd nacos/
    mvn -Prelease-nacos -Dmaven.test.skip=true clean install -U
    ls -al distribution/target/

    // change the version to your actual path cd distribution/target/nacos-server-version/nacos/bin

  • 下載編譯后的壓縮包方式

    • 您可以從 最新穩(wěn)定版本 下載 nacos-server-$version.zip 包收恢。

      unzip nacos-server-version.zip 或者 tar -xvf nacos-server-version.tar.gz
      cd nacos/bin

    • 解壓后可以發(fā)現(xiàn),其實是個 SpringBoot 工程

啟動服務(wù)器

  • Linux/Unix/Mac
    啟動命令(standalone代表著單機模式運行武学,非集群模式):

    sh startup.sh -m standalone

  • 如果您使用的是ubuntu系統(tǒng),或者運行腳本報錯提示[[符號找不到伦意,可嘗試如下運行:

    bash startup.sh -m standalone

  • Windows

    啟動命令:

    cmd startup.cmd

    或者雙擊startup.cmd運行文件火窒。

啟動后可以在日志文件后看到

:   |   \ | :  ,--.--.     ,---.  /   /   | /  /    '   Pid: 2423
|   : '  '; | /       \   /     \.   ; ,. :|  :  /`./   Console: http://169.254.212.54:8848/nacos/index.html
'   ' ;.    ;.--.  .-. | /    / ''   | |: :|  :  ;_
|   | | \   | \__\/: . ..    ' / '   | .; : \  \    `.      https://nacos.io
'   : |  ; .' ," .--.; |'   ; :__|   :    |  `----.   \
|   | '`--'  /  /  ,.  |'   | '.'|\   \  /  /  /`--'  /
'   : |     ;  :   .'   \   :    : `----'  '--'.     /
;   |.'     |  ,     .-./\   \  /            `--'---'


* 默認用戶名密碼: nacos/nacos
  • Tips:

    1. 如果想修改JVM參數(shù),那么直接修改 startup.sh 文件即可驮肉。
    2. 如果想修改 Nacos 的端口: 安裝目錄: /nacos/conf/application.properties 文件中修改即可

進入控制臺

  • Nacos有幾個基礎(chǔ)概念熏矿,我們只有先了解清楚之后才能更好的結(jié)合到業(yè)務(wù)場景:

    • namespace 命名空間

    • Group 配置分組

    • DataID 具體的配置文件名稱,例如: application-dev.yml

    • 一般我們使用namespace來區(qū)分不同的項目或環(huán)境。

    • 不同的 namespace 或者不同的 Group 之間的配置與服務(wù)都是隔離的

    • Group 區(qū)分配置的差異系比如A業(yè)務(wù)獲取的配置和B團隊的有一些細微的差別可以通過Group來區(qū)分离钝。

      • 配置分組票编,建議填寫產(chǎn)品名:模塊名(Nacos:Test)保證唯一性,只允許英文字符和4種特殊字符("."卵渴、":"慧域、"-"、"_")浪读,不超過128字節(jié)昔榴。

      • 需要在客戶端的bootstrap.properties來添加分組信息才能取到非默認組的文件

    • 最后使用DataId來區(qū)分具體的配置文件。

    • 一個 DataID 就對應(yīng)一個配置文件碘橘。

  • 如果需要使用 Nacos 的配置中心功能

    1. 首先新建一個命名空間 - 不創(chuàng)建則會使用默認的命名空間(public)

      • 比如: 先創(chuàng)建一個 sms-dev 表示短信平臺項目 Dev 環(huán)境

      • 目前一個命名空間下最多可以配置 200 個配置文件论泛。

    2. 在配置管理頁面新建一個配置

      * DataID :  sms-api-service-dev.yaml
      
      * Group  :        DEFAULT_GROUP
      
      * 配置格式:        YAML
      
      * 配置內(nèi)容:        user.name: sms-api-service-dev-yaml
                        user.age: 68
      
      • 注意:注意dataid是以 properties(默認的文件擴展名方式)為擴展名。如果要使用 yml 或者 yaml

        • 在應(yīng)用的 bootstrap.properties 配置文件中顯示的聲明 dataid 文件擴展名蛹屿。如下所示

          • bootstrap.properties

            spring.cloud.nacos.config.file-extension=yaml

      • 注意: 如果不使用 DEFAULT_GROUP , 則需要在客戶端的bootstrap.properties來添加分組信息才能取到非默認組的文件

        spring.cloud.nacos.config.group=myGroup1
        
      • 新建完成后,也有對應(yīng)的JAVA系的示例代碼

2.2 Nacos Spring Cloud 快速開始

https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html

本文主要面向 Spring Cloud 的使用者屁奏,通過兩個示例來介紹如何使用 Nacos 來實現(xiàn)分布式環(huán)境下的配置管理和服務(wù)注冊發(fā)現(xiàn)。

  • 關(guān)于 Nacos Spring Cloud 的詳細文檔請參看:Nacos Config 和 Nacos Discovery错负。

    通過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 實現(xiàn)配置的動態(tài)變更坟瓢。
    通過 Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery 實現(xiàn)服務(wù)的注冊與發(fā)現(xiàn)。

  1. 前提

    您需要先下載 Nacos 并啟動 Nacos server犹撒。

  2. 使用配置中心

    1. 客戶端依賴

      1. parent.xml - 采用公共版本依賴管理的方式

         <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Finchley.SR4</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
        
        <dependencyManagement>
            <dependencies>
        
                <!--spring cloud alibaba-->
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                    <version>2.0.2.RELEASE</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
        
            <dependencies>
        
        <dependencyManagement>
        
      2. my-demo.xml

         <!--配置中心客戶端-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
        </dependency>
        
    2. 然后必須配置下面這兩個配置項

      spring.application.name=nacos-demo
      # spring.cloud.nacos.config.server-addr :Nacos 服務(wù)器的地址和端口
      spring.cloud.nacos.config.server-addr=127.0.0.1:8848
      
      • server-addr 屬性

        • 代碼位置: com.alibaba.nacos.client.config.impl.ServerListManager#ServerListManager(java.util.Properties)

          if (StringUtils.isNotEmpty(serverAddrsStr)) {
              isFixed = true;
              List<String> serverAddrs = new ArrayList<String>();
              String[] serverAddrsArr = serverAddrsStr.split(",");
              for (String serverAddr: serverAddrsArr) {
                  if (serverAddr.startsWith(HTTPS) || serverAddr.startsWith(HTTP)) {
                      serverAddrs.add(serverAddr);
                  } else {
                      String[] serverAddrArr = serverAddr.split(":");
                      if (serverAddrArr.length == 1) {
                          serverAddrs.add(HTTP + serverAddrArr[0] + ":" + ParamUtil.getDefaultServerPort());
                      } else {
                          serverAddrs.add(HTTP + serverAddr);
                      }
                  }
              }
              serverUrls = serverAddrs;
              if (StringUtils.isBlank(namespace)) {
                  name = FIXED_NAME + "-" + getFixedNameSuffix(serverUrls.toArray(new String[serverUrls.size()]));
              } else {
                  this.namespace = namespace;
                  this.tenant = namespace;
                  name = FIXED_NAME + "-" + getFixedNameSuffix(serverUrls.toArray(new String[serverUrls.size()])) + "-"
                      + namespace;
              }
          }
          
        • 從源碼可知

          • 實際上是支持配置多個地址的折联,只需要用 ; 分割。 不具有客戶端負載均衡的效果识颊,但是有高可用的效果诚镰。

          • 如果配置的某個地址沒有帶上 ":port" 部分奕坟,那么默認會把 8848 作為端口號來拼接。因此在你搭建了NacosVip的情況下,建議讓Nginx也監(jiān)聽 8848 端口清笨,或者在你的vip后面補充一個 :80 即可月杉。

      • 說明:之所以需要配置 spring.application.name ,是因為它是構(gòu)成 Nacos 配置管理 dataId字段的一部分抠艾。

        • 在 Nacos Spring Cloud 中苛萎,dataId 的完整格式如下:

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

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

          • spring.profile.active 即為當前環(huán)境對應(yīng)的 profile腌歉,詳情可以參考 Spring Boot文檔。 注意:當 spring.profile.active 為空時齐苛,對應(yīng)的連接符 - 也將不存在翘盖,dataId 的拼接格式變成
            {prefix}.{file-extension}

          • file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過配置項 spring.cloud.nacos.config.file-extension 來配置凹蜂。目前只支持 properties 和 yaml 類型最仑。

        • 以上面的例兩行配置為例: 此時將會加載 nacos 中 默認(public) 命名空間下的, DEFAULT_GROUP 分組下的 DataID 為 nacos-demo.properties 文件。

        • 如果需要加載指定命名空間(sms-dev)下非默認分組(MY_GROUP1)下的DataID 為 sms-api-service-dev.yaml 的配置文件

          1. bootstrap.yml

            spring:
              application:
                name: @artifactId@
              cloud:
                nacos:
                  discovery:
                    server-addr: 127.0.0.1:8848
                  config:
                    server-addr: ${spring.cloud.nacos.discovery.server-addr}
                    file-extension: yaml
                    namespace: sms-dev
                    group: MY_GROUP1
              profiles:
                active: @profiles.active@
            
          2. pom.xml 中配置的 artifactId 為 sms-api-service, rofiles.active 為 dev

            • 當然也可以不引用 pom.xml 中的配置炊甲。直接在 bootstrap.yml 中寫入這兩個值。
      • 注意

        當你使用域名的方式來訪問 Nacos 時欲芹,spring.cloud.nacos.config.server-addr 配置的方式為 域名:port卿啡。 例如 Nacos 的域名為abc.com.nacos,監(jiān)聽的端口為 80菱父,則 spring.cloud.nacos.config.server-addr=abc.com.nacos:80颈娜。 注意 80 端口不能省略。

      • 示例: 在SpringBoot中打印配置

        public static void main(String[] args) {
            ConfigurableApplicationContext applicationContext = SpringApplication.run(ProviderApplication.class, args);
            String userName = applicationContext.getEnvironment().getProperty("user.name");
            String userAge = applicationContext.getEnvironment().getProperty("user.age");
            System.err.println("user name :"+userName+"; age: "+userAge);
        }
        
    3. 完全關(guān)閉配置

      通過設(shè)置 spring.cloud.nacos.config.enabled = false 來完全關(guān)閉 Spring Cloud Nacos Config

  1. 使用注冊中心 - Nacos discovery

    1. 依賴配置

      <dependency>
         <groupId>com.alibaba.cloud</groupId>
         <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      
      • pom.xml的配置浙宜。一個完整的 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
            <modelVersion>4.0.0</modelVersion>
        
            <groupId>open.source.test</groupId>
            <artifactId>nacos-discovery-test</artifactId>
            <version>1.0-SNAPSHOT</version>
            <name>nacos-discovery-test</name>
        
            <parent>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-parent</artifactId>
                <version>${spring.boot.version}</version>
                <relativePath/>
            </parent>
        
            <properties>
                <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
                <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
                <java.version>1.8</java.version>
            </properties>
        
            <dependencyManagement>
                <dependencies>
                    <dependency>
                        <groupId>org.springframework.cloud</groupId>
                        <artifactId>spring-cloud-dependencies</artifactId>
                        <version>${spring.cloud.version}</version>
                        <type>pom</type>
                        <scope>import</scope>
                    </dependency>
                    <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>
        
            <dependencies>
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-web</artifactId>
                </dependency>
        
                <dependency>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-actuator</artifactId>
                </dependency>
        
                <dependency>
                    <groupId>com.alibaba.cloud</groupId>
                    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
                </dependency>
            </dependencies>
        
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-maven-plugin</artifactId>
                    </plugin>
                </plugins>
            </build>
        </project>
        
    2. 啟動一個 Provider 應(yīng)用

      1. 在 bootstrap.properties 中或者 application.properties 中配置

        server.port=8081
        spring.application.name=nacos-producer
        
        spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848
        
        # management.endpoints.web.exposure.include=*
        
      2. 應(yīng)用程序啟動類添加 @EnableDiscoveryClient 注解官辽。

        @SpringBootApplication
        @EnableDiscoveryClient
        public class NacosProviderDemoApplication {

         public static void main(String[] args) {
             SpringApplication.run(NacosProducerDemoApplication.class, args);
         }
        
         @RestController
         public class EchoController {
             @GetMapping(value = "/echo/{string}")
             public String echo(@PathVariable String string) {
                 return "Hello Nacos Discovery " + string;
             }
         }
        

        }

    3. 服務(wù)的 EndPoint

      spring-cloud-starter-alibaba-nacos-discovery 在實現(xiàn)的時候提供了一個EndPoint,EndPoint的訪問地址為 http://ip:port/actuator/nacos-discovery。 EndPoint 的信息主要提供了兩類:

      1. subscribe: 顯示了當前有哪些服務(wù)訂閱者
      2. NacosDiscoveryProperties: 顯示了當前服務(wù)實例關(guān)于 Nacos 的基礎(chǔ)配置
    4. 啟動一個 Consumer 應(yīng)用

      Consumer 的應(yīng)用可能還沒像啟動一個 Provider 應(yīng)用那么簡單粟瞬。因為在 Consumer 端需要去調(diào)用 Provider 端提供的REST 服務(wù)同仆。例子中我們使用最原始的一種方式, 即顯示的使用 LoadBalanceClient 和 RestTemolate 結(jié)合的方式來訪問裙品。

      Note
      通過帶有負載均衡的RestTemplate 和 FeignClient 也是可以訪問的俗批。

      @SpringBootApplication
      @EnableDiscoveryClient
      public class NacosConsumerApp {
      
          @RestController
          public class NacosController{
      
              @Autowired
              private LoadBalancerClient loadBalancerClient;
              @Autowired
              private RestTemplate restTemplate;
      
              @Value("${spring.application.name}")
              private String appName;
      
              @GetMapping("/echo/app-name")
              public String echoAppName(){
                  //使用 LoadBalanceClient 和 RestTemolate 結(jié)合的方式來訪問
                  ServiceInstance serviceInstance = loadBalancerClient.choose("nacos-provider");
                  String url = String.format("http://%s:%s/echo/%s",serviceInstance.getHost(),serviceInstance.getPort(),appName);
                  System.out.println("request url:"+url);
                  return restTemplate.getForObject(url,String.class);
              }
      
          }
      
          //實例化 RestTemplate 實例
          @Bean
          public RestTemplate restTemplate(){
      
              return new RestTemplate();
          }
      
          public static void main(String[] args) {
      
              SpringApplication.run(NacosConsumerApp.class,args);
          }
      }
      

      這個例子中我們注入了一個 LoadBalancerClient 的實例,并且手動的實例化一個 RestTemplate市怎,同時將 spring.application.name 的配置值 注入到應(yīng)用中來岁忘, 目的是調(diào)用 Provider 提供的服務(wù)時,希望將當前配置的應(yīng)用名給顯示出來区匠。

      • Note
        在啟動 Consumer 應(yīng)用之前請先將 Nacos 服務(wù)啟動好干像。具體啟動方式可參考 Nacos 官網(wǎng)。

      啟動后,訪問 Consumer 提供出來的 http://ip:port/echo/app-name 接口麻汰。我這里測試啟動的 port是 8082速客。訪問結(jié)果如下所示:

       訪問地址:http://127.0.0.1:8082/echo/app-name
       訪問結(jié)果:Hello Nacos Discovery nacos-consumer
      
    5. 關(guān)于 Nacos Starter 更多的配置項信息

      https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery#%E5%85%B3%E4%BA%8E-nacos-starter-%E6%9B%B4%E5%A4%9A%E7%9A%84%E9%85%8D%E7%BD%AE%E9%A1%B9%E4%BF%A1%E6%81%AF

      • 例如:

        集群 spring.cloud.nacos.discovery.cluster-name DEFAULT 配置成Nacos集群名稱
        AccessKey spring.cloud.nacos.discovery.access-key 無 當要上阿里云時,阿里云上面的一個云賬號名
        是否開啟Nacos Watch spring.cloud.nacos.discovery.watch.enabled true 可以設(shè)置成false來關(guān)閉 watch
        命名空間 spring.cloud.nacos.discovery.namespace 無 常用場景之一是不同環(huán)境的注冊的區(qū)分隔離什乙,例如開發(fā)測試環(huán)境和生產(chǎn)環(huán)境的資源(如配置挽封、服務(wù))隔離等

    6. Note

      • 如果不想使用 Nacos 作為您的服務(wù)注冊與發(fā)現(xiàn),可以將 spring.cloud.nacos.discovery.enabled 設(shè)置為 false臣镣。
    • 官方參考
    * 示例:  https://github.com/nacos-group/nacos-examples/tree/master/nacos-spring-cloud-example/nacos-spring-cloud-discovery-example

    * 詳細:https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-discovery

3. 示例-客戶端配置Nacos注冊中心與配置中心

  • pom.xml

      ```xml
      <!--注冊中心客戶端-->
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
      </dependency>
      <!--配置中心客戶端-->
      <dependency>
          <groupId>com.alibaba.cloud</groupId>
          <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
      </dependency>
      ```
    
    • bootstrap.yml

      server:
        port: 7002
      
      spring:
        application:
          name: @artifactId@
        cloud:
          nacos:
            discovery:
              server-addr: 127.0.0.1:8848
              namespace: sms-dev
              # 設(shè)置 nacos client 使用這個 ip 注冊到 nacos server , 若不配置則會自動探測辅愿。
              #ip: 192.160.22.22
      
            config:
              server-addr: ${spring.cloud.nacos.discovery.server-addr}
              file-extension: yaml
              namespace: sms-dev
              group: DEFAULT_GROUP
              shared-configs:
                - data-id: application-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
                  group: @nacos.group@
                  refresh: false
        profiles:
          active: @profiles.active@
      
  • 注意:版本 2.1.x.RELEASE 對應(yīng)的是 Spring Boot 2.1.x 版本。版本 2.0.x.RELEASE 對應(yīng)的是 Spring Boot 2.0.x 版本忆某,版本 1.5.x.RELEASE 對應(yīng)的是 Spring Boot 1.5.x 版本点待。

  • 注意: 關(guān)于 Nacos 的配置需要在 bootstrap.yaml 中配置。

  • 注意: @RefreshScope與數(shù)據(jù)源之間存在沖突F妗癞埠!

    因為項目是多數(shù)據(jù)源,所以使用的是自定義數(shù)據(jù)源配置的DataSource聋呢,用@Bean注入苗踪。

    在SpringBoot 2.0以上默認使用Hikari連接池,一旦連接池啟動削锰,就無法再修改HikariDataSource通铲,所以刷新配置時連帶數(shù)據(jù)源一起刷新,于是會報錯器贩。

    Caused by: java.lang.IllegalStateException: The configuration of the pool is sealed once started. Use HikariConfigMXBean for runtime changes.

    解決方法: 在自定義的DataSource上加入注解@RefreshScope颅夺,或者使用spring.scloud.refresh.extra-refreshable配置指定classname列表即可。

      查看Hikari的默認配置即可發(fā)現(xiàn)蛹稍,這個與刷新配置之間是存在沖突的吧黄。
    
      因此在數(shù)據(jù)源配置類中加入注釋,這樣每次刷新配置的時候會重新刷新這個Bean唆姐,那么就可以保證不會報錯拗慨,這樣的spring的刷新機制就可以順利執(zhí)行下去了概作。
    

4. 常見問題

  • SpringCloud 以及NACOS服務(wù)注冊IP選擇問題

    https://www.freesion.com/article/7975464506/

  • Nacos 權(quán)限配置

    https://nacos.io/en-us/blog/nacos%201.2.0%20guide.html

    Server端打開權(quán)限控制開關(guān)茂装。修改con/application.properties內(nèi)容:

    nacos.core.auth.enabled=true

    這個開關(guān)采用了熱加載模式,無需重啟Server即可生效醋粟。因此當權(quán)限控制功能使用有異常時仗阅,可以直接回滾到不鑒權(quán)的模式昌讲。

用戶指南

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市减噪,隨后出現(xiàn)的幾起案子短绸,更是在濱河造成了極大的恐慌车吹,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,482評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件醋闭,死亡現(xiàn)場離奇詭異窄驹,居然都是意外死亡,警方通過查閱死者的電腦和手機证逻,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,377評論 2 382
  • 文/潘曉璐 我一進店門乐埠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人囚企,你說我怎么就攤上這事丈咐。” “怎么了龙宏?”我有些...
    開封第一講書人閱讀 152,762評論 0 342
  • 文/不壞的土叔 我叫張陵棵逊,是天一觀的道長。 經(jīng)常有香客問我银酗,道長辆影,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,273評論 1 279
  • 正文 為了忘掉前任黍特,我火速辦了婚禮蛙讥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘灭衷。我一直安慰自己次慢,他們只是感情好,可當我...
    茶點故事閱讀 64,289評論 5 373
  • 文/花漫 我一把揭開白布今布。 她就那樣靜靜地躺著,像睡著了一般拭抬。 火紅的嫁衣襯著肌膚如雪部默。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,046評論 1 285
  • 那天造虎,我揣著相機與錄音傅蹂,去河邊找鬼。 笑死算凿,一個胖子當著我的面吹牛份蝴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播氓轰,決...
    沈念sama閱讀 38,351評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼婚夫,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了署鸡?” 一聲冷哼從身側(cè)響起案糙,我...
    開封第一講書人閱讀 36,988評論 0 259
  • 序言:老撾萬榮一對情侶失蹤限嫌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后时捌,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體怒医,經(jīng)...
    沈念sama閱讀 43,476評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,948評論 2 324
  • 正文 我和宋清朗相戀三年奢讨,在試婚紗的時候發(fā)現(xiàn)自己被綠了稚叹。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,064評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡拿诸,死狀恐怖扒袖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情佳镜,我是刑警寧澤僚稿,帶...
    沈念sama閱讀 33,712評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站蟀伸,受9級特大地震影響蚀同,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜啊掏,卻給世界環(huán)境...
    茶點故事閱讀 39,261評論 3 307
  • 文/蒙蒙 一蠢络、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧迟蜜,春花似錦刹孔、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,264評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至畦戒,卻和暖如春方库,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背障斋。 一陣腳步聲響...
    開封第一講書人閱讀 31,486評論 1 262
  • 我被黑心中介騙來泰國打工纵潦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人垃环。 一個月前我還...
    沈念sama閱讀 45,511評論 2 354
  • 正文 我出身青樓邀层,卻偏偏與公主長得像,于是被迫代替她去往敵國和親遂庄。 傳聞我的和親對象是個殘疾皇子寥院,可洞房花燭夜當晚...
    茶點故事閱讀 42,802評論 2 345

推薦閱讀更多精彩內(nèi)容