SpringCloud-Alibaba-Nacos 服務註冊中心&配置中心
阿新 • • 發佈:2020-04-28
# Spring Cloud Alibaba
由於 Spring Cloud Netflix 專案進入維護模式(將模組置於維護模式意味著 Spring Cloud 團隊將不會再向模組中新增新功能,只會修復 block 級別的 bug 以及安全問題),阿里巴巴團隊為我們提供了一套新的微服務開發一站式解決方案
詳見官方介紹:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
# Nacos 概述
## 是什麼?
一個更易於構建雲原生應用的動態服務發現、配置管理和服務管理平臺。
Nocas 就是註冊中心與配置中心的組合,可以替代 Eureka + Config + Bus
## 能幹嘛?
替代 Eureka 做服務註冊中心;替代 Config 做服務配置中心
## 下載、安裝與執行
下載地址:https://github.com/alibaba/nacos/releases
下載解壓後,開啟 bin 目錄,開啟 cmd 視窗輸入 startup.cmd 或者雙擊 startup.cmd 均可啟動(Windows版)
![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200428100348.png)
瀏覽器位址列輸入 `localhost:8848/nacos` 登入,預設使用者名稱密碼都是 nacos,主頁面如下:
![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200428100535.png)
# Nacos 作為註冊中心
引入 Maven 依賴
```xml
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
```
需要在配置檔案 application.yml 指定 Nacos 地址
```yml
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848 # nacos地址
```
Nacos 預設是支援負載均衡的,集成了 Ribbon
![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200428111646.png)
將服務註冊到 Nacos 後可以在服務列表中檢視
![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200428113445.png)
# Nacos 與其它註冊中心的對比
Nacos 與其它註冊中心特性對比
![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200428113319.png)
**Nacos 支援 AP(高可用) 和 CP(強一致性) 模式的切換**
使用命令 `curl -X PUT '$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'` 進行切換
# Nacos 作為配置中心
## 基礎配置
所需 Maven 依賴
```xml
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-config
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
```
application.yml
```yml
spring:
profiles:
active: dev
```
bootstrap.yml
```yml
server:
port: 3377
spring:
application:
name: nacos-config-client
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
file-extension: yml #配置檔案格式
```
在 Nacos 介面新建配置檔案,命名規則是 `${prefix}-${spring.profile.active}.${file-extension}`,通俗來說就是:`專案名-部署環境.檔案字尾`
![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200428134648.png)
## 分類配置
Nacos 採用 NameSpace + Group + Data Id 的分類方式,類似於 Java 裡的包名 + 類名 + 方法名
**NameSpace 用於區分部署環境,Group 和 Data Id 邏輯上區分兩個目標物件,預設 NameSpace = public;group = DEFAULT_GROUP;Cluster = DEFAULT**
![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200428133527.png)
### Data Id 方案
編寫兩個不同部署環境的配置檔案,只要在 application.yml 中修改了部署環境,就可以獲取到對應配置檔案的內容
![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200428134731.png)
### Group 方案
新建配置檔案的時候指定分組
![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200428140141.png)
![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200428140353.png)
通過此配置指定選擇的分組
```yml
spring:
cloud:
nacos:
config:
group: DEV_GROUP
```
### NameSpace 方案
配置不同的分組,初始預設只有一個 public
![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200428142157.png)
通過此配置指定選擇的名稱空間
```yml
spring:
cloud:
nacos:
config:
namespace: 2d22fcfe-2314-49c4-8a67-6b12397f44d2 #名稱空間的唯一標識
```
# Nacos 叢集與持久化配置
**Nacos支援三種部署模式**
- 單機模式:用於測試和單機試用
- 叢集模式:用於生產環境,確保高可用
- 多叢集模式:用於多資料中心場景
![](https://gitee.com/songjilong/FigureBed/raw/master/img/20200428163400.png)
## Nacos 持久化配置解釋
Nacos 預設自帶的是嵌入式資料庫 derby,對於 Nacos 叢集不能實現資料共享,為了能夠保證真正持久化,我們需要切換到 Mysql 資料庫
1、到 `nacos\conf` 目錄下找到 nacos-mysql.sql 檔案,新建一個 `nacos_config` 資料庫,將裡面的語句在資料庫中執行
2、在 `application.properties` 末尾新增如下配置
```properties
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=youdontknow
```
3、啟動 Nacos,進入頁面可以發現之前的資料不見了,新新增的配置可以在 MySQL 資料庫