本文來自於《精通Spring Cloud Alibaba》課程的整理,講師為餘勝軍,點擊查看視頻內容。
本文系志願者整理,供配合學習中心課程使用,不做商業用途。
分佈式配置中心
Nacos是阿里巴巴開源開源框架。
所解決的問題是:註冊中心| 分佈式配置中心。
可以替代之前學習Eureka和SPringConfig | 攜程阿波羅
IP:端口號/調用方法加名稱+參數
192.168.212.110:8080/getUser
分佈式配置中心產生的背景?
在項目中定義配置文件,最大的缺陷是什麼?
如果在生產環境正在運行的時候突然需要修改配置文件的話,必須重啟我們的服務器。
定義配置規範:前面一定加上團隊名稱。
輕量級與重量級分別表示什麼意思?
輕量級:部署、架構設計原理都比較簡單,學習成本也是比較低:
重量級:部署、架構設計、體量都是非常大,學習成本是比較高。
如何判斷配置文件是否發生變化:採用 版本 | MD5。
分佈式配置中心實現原理:
1、本地應用讀取我們雲端分佈式配置中心文件(第一次建立長連接)
2、本地應用讀取到配置文件之後,本地jvm和硬盤中都會緩存一份。
3、本地應用與分佈式配置中心服務器端一直保持長連接。
4、當我們的配置文件發生變化(MD5 | 版本號)實現區分,將變化的結果通知給我們的本地應用及時的刷新我們的配置文件。
完全百分百實現動態化修改我們的配置文件。
注意:Nacos分佈式配置中心和註冊中心都部署在同一個應用,就是一個單體的應用。
分佈式配置中心的作用
分佈式配置中心可以實現不需要重啟我們的服務器,動態的修改我們的配置文件內容,
常見的配置中心有攜程的阿波羅、SpringCloud Config、Nacos輕量級的配置中心等。
基於Nacos實現分佈式配置中心
服務器端
Nacos使用配置中心的發佈規則:
Dataid名稱:默認的情況服務名稱-版本.yaml | properties形式
版本:dev、test、pre、prd等。
客戶端
引入依賴:nacos整合config
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
<version>0.2.2.RELEASE</version>
創建一個bootstrap.yml
注意事項:
nacos本地如果也配置的話,可能在啟動的時候會拋出異常。
spring:
application:
###服務的名稱
name: meitemayikt-nacos-client
cloud:
nacos:
discovery:
###nacos註冊地址
server-addr: 127.0.0.1:8848
enabled: true
config:
###配置中心連接地址
server-addr: 127.0.0.1:8848
###分組
group: DEFAULT_GROUP
###類型
file-extension: yaml
@RestController
@SpringBootApplication
@RefreshScope
public class NacosController {
@Value("${mayikt.name}")
private String userName;
@RequestMapping("/getConfig")
public String getConfig() {
return userName;
}
public static void main(String[] args) {
SpringApplication.run(NacosController.class);
}
}
注意:連接nacos分佈式配置中心一定採用bootstrap形式優先加載 否則可能會報錯。
bootstrap與application的區別:
bootstrap.yml 用於應用程序上下文的引導階段。application.yml 由父Spring ApplicationContext加載。
可以實現動態實現@RefreshScope;可以對配置內容進行監聽,察覺到內容被編輯之後會立刻刷新,而不用重啟服務器。
修改配置內容:
多版本控制
分別在nacos服務器端創建
meitemayikt-nacos-client-dev.yaml
meitemayikt-nacos-client-prd.yaml
客戶端指定讀取版本
運行結果展示:
數據持久化
找到配置文件config:創建數據庫表mysql,然後連接到properties.
第一步:新建數據庫
然後將sql文檔裡面的內容複製在查詢框裡面執行一下。這幾張表就有了。
插入一個用戶信息:
執行結果:
最後,連接數據庫:
登錄測試:用戶名:mayikt,密碼:nacos。
可以看到:切換數據源之後,之前的數據都看不到了。可以再次新建配置:
點擊發布之後,配置的內容自動保存在數據庫了。
注意:
默認的情況下,分佈式配置中心的數據存放到本地data目錄下,但是這種情況如果nacos集群的話無法保證數據的同步性。
在0.7版本之前,在單機模式時nacos使用嵌入式數據庫實現數據的存儲,不方便觀察數據存儲的基本情況。0.7版本增加了支持mysql數據源能力,具體的操作步驟:
1.安裝數據庫,版本要求:5.6.5+
2.初始化mysql數據庫,數據庫初始化文件:nacos-mysql.sql
3.修改conf/application.properties文件,增加支持mysql數據源配置(目前只支持mysql),添加mysql數據源的url、用戶名和密碼。
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=root