前言:不斷學習就是程序員的宿命
中文:https://github.com/alibaba/spring-cloud-alibaba/blob/master/README-zh.md
官網:https://spring.io/projects/spring-cloud-alibaba
英文版:https://github.com/alibaba/spring-cloud-alibaba
分支主題:https://spring-cloud-alibaba-group.github.io/github-pages/greenwich/spring-cloud-alibaba.html
一、Nacos
一個更易於構建原生應用的動態服務發現、配置管理和服務管理平台。Nacos=注冊中心+配置中心=Eureka+Config+Bus
下載地址:https://github.com/alibaba/nacos/releases
二、Nacos作為服務注冊中心
啟動Nacos:/bin/startup.cmd啟動Nacos,http://localhost:8848/,默認用戶名與密碼為nacos
1、Provider注冊至Nacos
1.1、pom

<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<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>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
1.2、application.yml

server: port: 9001 spring: application: name: nacos-payment-provider cloud: nacos: discovery: server-addr: localhost:8848 management: endpoints: web: exposure: include: "*"
1.3、啟動類

@SpringBootApplication @EnableDiscoveryClient public class PaymentMain9001 { public static void main(String[] args) { SpringApplication.run(PaymentMain9001.class, args); } }
1.4、測試
啟動模塊cloudalibaba-provider-payment9001,查看Nacos,服務已注冊至Nacos
2、Consumer注冊至Nacos
2.1、pom

<dependencies>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.xd.springcloud</groupId>
<artifactId>cloud-api-common</artifactId>
<version>${project.version}</version>
</dependency>
<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>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
</project>
2.2、application.yml

server: port: 83 spring: application: name: nacos-order-consumer cloud: nacos: discovery: server-addr: localhost:8848 #消費者將要去訪問的微服務名稱(注冊成功進nacos的微服務提供者) service-url: nacos-user-service: http://nacos-payment-provider
2.3、測試
3、Nacos天生支持負載均衡
4、Nacos服務發現實例模型
5、Nacos的AP與CP模式切換
C是所有節點在同一時間看到的數據是一致的;A是所有的請求都會收到響應。何時選擇使用何種模式?
①一般來說,如果不需要存儲服務級別的信息且服務實例是通過Nacos-client注冊,並能夠保持心跳上報,那么就可以選擇AP模式。當前主流服務如Dubbo、SpringCloud都適合Ap模式,AP模式為了服務的可能性而減弱了一致性,因此AP模式下只能注冊臨時實例
②如果需要在服務級別編輯或存儲配置信息,那么CP是必須,K8S服務和DNS服務則適用於CP服務,CP模式下則支持注冊持久化實例,此時則是以Raft協議為集群運行模式,該模式下注冊實例之前必須先注冊服務,如果服務不存在,則會返回錯誤。
切換:curl -X PUT `$NACOS_SERVER:8848/nacos/v1/ns/operator/switches?entry=serverMode&value=CP'
三、Nacos作為服務配置中心
官網:https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
1、Nacos基礎配置
1.1、Nacos中的DataId的組成格式與SpringBoot配置文件中的匹配規則
1.2、測試
測試前保證nacos客戶端-配置管理-配置管理欄下游對應的yaml配置文件
2、Nacos分類配置(高級)
2.1命名空間、分組、DataID之間關系
Nacos 數據模型 Key 由三元組唯一確定, Namespace默認是空串,公共命名空間(public),分組默認是 DEFAULT_GROUP。
(1)NameSpace
Nacos默認的命名空間是public、NameSpace主要用來隔離,比如我們現在有3個開發環境:開發、測試、生產環境,我們就可以創建3個NameSpace,不同的NameSpace之間是隔離的。
(2)Group
默認是DEFAULT_GROUP,Group可以把不同的微服務划分到同一個分組里面去。
(3)Service
Service就是微服務,一個Service可以包含多個Cluster(集群),Nacos默認Cluster是DEFAULT,Cluster是對指定的微服務一個虛擬划分。
比如說為了容災,將Service微服務分別部署在了杭州機房和廣州機房,這時就可以給杭州機房的Service微服務起一個集群名稱(HZ),廣州機房微服務集群名稱(GZ),還可以盡量讓同一個機房的微服務相互調用,以提升性能。
(4)Instance
就是微服務實例
3、三種方案加載配置
①DataID方案:指定spring.profile.active和配置文件的DataID來使不同環境下讀取不同的配置:默認空間+默認分組+新建dev和test兩個DataId
通過spring.profile.active屬性就能進行多環境下配置文件的讀取
②Group方案:通過Group實現環境區分
③Namespace方案:NameSpace+Group+profile區分