Nacos基礎應用

Nacos介紹

一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺

快速開始

  1. 下載安裝包,並解壓啓動
linux/mac:sh startup.sh -m standalone
windows:startup.cmd -m standalone
  1. 訪問nacos管理界面

http://127.0.0.1:8848/nacos/#/login (默認賬號密碼:nacos/nacos)

Nacos Server集羣

  1. 安裝3個或3個以上的Nacos,複製解壓後的nacos文件夾,分別命名爲nacos-01、nacos-02、nacos-03
  2. 修改配置文件,同⼀臺機器模擬,將上述三個⽂件夾中application.properties中的server.port分別改爲 8848、8849、8850同時給當前實例節點綁定ip,因爲服務器可能綁定多個ip
nacos.inetutils.ip-address=127.0.0.1
  1. 複製⼀份conf/cluster.conf.example⽂件,命名爲cluster.conf,再在配置⽂件中設置集羣中每⼀個節點的信息
# 集羣節點配置
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850
  1. 啓動
sh startup.sh -m cluster

Nacos-註冊中心

  1. 在其父項目中引入依賴
    <dependencyManagement>
        <dependencies>
            <!--SCA -->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
        <!--SCA -->
    </dependencyManagement>
  1. 在服務提供者工程中引入nacos依賴
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
  1. 修改application.yml文件,增加配置
server:
  port: 8082
spring:
  application:
    name: resume-nacos
  jpa:
    database: MYSQL
  cloud:
    nacos:
      discovery:
        ################ 配置nacos server地址
        server-addr: 127.0.0.1:8848
  datasource:
     driver-class-name: com.mysql.jdbc.Driver
     url: jdbc:mysql://localhost:3306/nacos?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
     username: root
     password: '0490218292'
  1. 啓動成功後,nacos管理界面如下:

保護閾值:可以設置爲0-1之間的浮點數,它其實是⼀個比例值(當前服務健康實例數/當前服務總實例數)

保護閾值的使用場景:

當服務A健康實例數/總實例數<保護閾值的時候,說明健康實例真的不多了,這個時候保護閾值會被觸發(狀態true)nacos將會把該服務所有的實例信息(健康的+不健康的)全部提供給消費者,消費者可能訪問到不健康的實例,請求失敗,但這樣也⽐造成雪崩要好,犧牲了⼀些請
求,保證了整個系統的⼀個可⽤。

  1. 測試

建立一個項目,也引入nacos,用feign的方式調用剛纔的服務。

3.1 負載均衡

Nacos客戶端引入的時候,會關聯引入Ribbon的依賴,我們可以再啓動一個服務測試負載均衡。

3.2 Nacos 數據模型

  • Namespace:命名空間,對不同的環境進⾏隔離,⽐如隔離開發環境、測試環境和
    ⽣產環境
  • Group:分組,將若⼲個服務或者若⼲個配置集歸爲⼀組,通常習慣⼀個系統歸爲
    ⼀個組
  • Service:某⼀個服務,⽐如簡歷微服務
  • DataId:配置集或者可以認爲是⼀個配置⽂件

3.3 數據庫持久化

Nacos 默認使⽤嵌⼊式數據庫進⾏數據存儲,它⽀持改爲外部Mysql存儲

  1. 新建數據庫,並且執行conf/nacos-mysql.sql
  2. 修改/conf/application.properties,增加Mysql數據源配置
spring.datasource.platform=mysql

### Count of DB:
db.num=1

### Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=0490218292

Nacos-配置中心

  1. 在nacos server上添加配置信息

  1. 改造微服務,使其成爲nacos config client,能從nacos Server中獲取到配置信息

    2.1 在微服務中如何確定使用的是Nacos Server中的哪個配置文件呢(dataId)?
    通過Namespace+Group+dataId來鎖定。dataId的完整格式如下:

    ${prefix}-${spring.profile.active}.${file-extension}
    
    • prefix 默認爲 spring.application.name的值,也可以通過配置項spring.cloud.nacos.config.prefix 來配置。
    • spring.profile.active即爲當前環境對應的profile。注意:當spring.profile.active 爲空時,對應的連接符-也將不存在,dataId的拼接格式變成${prefix}.${file-extensio}
    • file-exetension爲配置內容的數據格式,可以通過配置項spring.cloud.nacos.config.file-extension 來配置。⽬前只⽀持properties 和 yaml 類型。

    2.2 引入依賴

    <dependency>
        <groupId>com.alibaba.cloud</groupId>
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    

    2.3 增加yaml配置

    spring:
      application:
        name: resume-nacos-consumer
      cloud:
          nacos:
            discovery:
              ################ 配置nacos server地址
              server-addr: 127.0.0.1:8848
            config:
              server-addr: 127.0.0.1:8848
              group: DEFAULT_GROUP
              file-extension: yaml
              namespace: public
    

    2.4 微服務裏讀取配置

    @RestController
    //動態刷新
    @RefreshScope
    public class ConfigController {
    
        @Value("${startText}")
        public String message;
    
        @RequestMapping("/getConfig")
        public String getConfig(){
            return message;
        }
    }
    

    2.5 如果微服務中需要讀取多個配置文件怎麼辦呢?

        # 根據規則拼接出來的dataId效果:lagou-service-resume.yaml
    ext-config[0]:
    data-id: abc.yaml
    group: DEFAULT_GROUP
    refresh: true #開啓擴展dataId的動態刷新
    ext-config[1]:
    data-id: def.yaml
    group: DEFAULT_GROUP
    refresh: true #開啓擴展dataId的動態刷新
    

    優先級:根據規則⽣成的dataId > 擴展處的dataId(對於擴展的dataId,[n] n越⼤優
    先級越⾼,如ext-config[1]大於ext-config[0])

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章