Nacos介紹
一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺
快速開始
- 下載安裝包,並解壓啓動
linux/mac:sh startup.sh -m standalone
windows:startup.cmd -m standalone
- 訪問nacos管理界面
http://127.0.0.1:8848/nacos/#/login (默認賬號密碼:nacos/nacos)
Nacos Server集羣
- 安裝3個或3個以上的Nacos,複製解壓後的nacos文件夾,分別命名爲nacos-01、nacos-02、nacos-03
- 修改配置文件,同⼀臺機器模擬,將上述三個⽂件夾中application.properties中的server.port分別改爲 8848、8849、8850同時給當前實例節點綁定ip,因爲服務器可能綁定多個ip
nacos.inetutils.ip-address=127.0.0.1
- 複製⼀份conf/cluster.conf.example⽂件,命名爲cluster.conf,再在配置⽂件中設置集羣中每⼀個節點的信息
# 集羣節點配置
127.0.0.1:8848
127.0.0.1:8849
127.0.0.1:8850
- 啓動
sh startup.sh -m cluster
Nacos-註冊中心
- 在其父項目中引入依賴
<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>
- 在服務提供者工程中引入nacos依賴
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
- 修改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'
- 啓動成功後,nacos管理界面如下:
保護閾值:可以設置爲0-1之間的浮點數,它其實是⼀個比例值(當前服務健康實例數/當前服務總實例數)
保護閾值的使用場景:
當服務A健康實例數/總實例數<保護閾值的時候,說明健康實例真的不多了,這個時候保護閾值會被觸發(狀態true)nacos將會把該服務所有的實例信息(健康的+不健康的)全部提供給消費者,消費者可能訪問到不健康的實例,請求失敗,但這樣也⽐造成雪崩要好,犧牲了⼀些請
求,保證了整個系統的⼀個可⽤。
- 測試
建立一個項目,也引入nacos,用feign的方式調用剛纔的服務。
3.1 負載均衡
Nacos客戶端引入的時候,會關聯引入Ribbon的依賴,我們可以再啓動一個服務測試負載均衡。
3.2 Nacos 數據模型
- Namespace:命名空間,對不同的環境進⾏隔離,⽐如隔離開發環境、測試環境和
⽣產環境 - Group:分組,將若⼲個服務或者若⼲個配置集歸爲⼀組,通常習慣⼀個系統歸爲
⼀個組 - Service:某⼀個服務,⽐如簡歷微服務
- DataId:配置集或者可以認爲是⼀個配置⽂件
3.3 數據庫持久化
Nacos 默認使⽤嵌⼊式數據庫進⾏數據存儲,它⽀持改爲外部Mysql存儲
- 新建數據庫,並且執行conf/nacos-mysql.sql
- 修改/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-配置中心
- 在nacos server上添加配置信息
-
改造微服務,使其成爲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])