Nacos 入门教程
一 、Nacos快速入門(mén)
-
Nacos 是阿里巴巴推出來(lái)的一個(gè)新開(kāi)源項(xiàng)目,這是一個(gè)更易于構(gòu)建云原生應(yīng)用的動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、配置管理和服務(wù)管理平臺(tái)。
-
Nacos 致力于幫助您發(fā)現(xiàn)、配置和管理微服務(wù)。Nacos
提供了一組簡(jiǎn)單易用的特性集,幫助您快速實(shí)現(xiàn)動(dòng)態(tài)服務(wù)發(fā)現(xiàn)、服務(wù)配置、服務(wù)元數(shù)據(jù)及流量管理。 -
Nacos 幫助您更敏捷和容易地構(gòu)建、交付和管理微服務(wù)平臺(tái)。 Nacos 是構(gòu)建以“服務(wù)”為中心的現(xiàn)代應(yīng)用架構(gòu)
(例如微服務(wù)范式、云原生范式) 的服務(wù)基礎(chǔ)設(shè)施。
常見(jiàn)的注冊(cè)中心:
Eureka(原生,2.0遇到性能瓶頸,停止維護(hù))
Zookeeper(支持,專業(yè)的獨(dú)立產(chǎn)品。例如:dubbo)
Consul(原生,GO語(yǔ)言開(kāi)發(fā))
Nacos
相對(duì)于 Spring Cloud Eureka 來(lái)說(shuō),Nacos 更強(qiáng)大。
Nacos = Spring Cloud Eureka + Spring Cloud Config + Bus
Nacos 可以與 Spring, Spring Boot, Spring Cloud 集成,并能代替 Spring Cloud Eureka, Spring Cloud Config
- 通過(guò) Nacos Server 和 spring-cloud-starter-alibaba-nacos-config 實(shí)現(xiàn)配置的動(dòng)態(tài)變更
- 通過(guò) Nacos Server 和 spring-cloud-starter-alibaba-nacos-discovery實(shí)現(xiàn)服務(wù)的注冊(cè)與發(fā)現(xiàn)
Nacos是以服務(wù)為主要服務(wù)對(duì)象的中間件,Nacos支持所有主流的服務(wù)發(fā)現(xiàn)、配置和管理。
Nacos主要提供以下四大功能:
服務(wù)發(fā)現(xiàn)和服務(wù)健康監(jiān)測(cè)
動(dòng)態(tài)配置服務(wù)
動(dòng)態(tài)DNS服務(wù)
服務(wù)及其元數(shù)據(jù)管理
結(jié)構(gòu)圖:
Nacos 依賴 Java 環(huán)境來(lái)運(yùn)行。建議直接使用docker進(jìn)行安裝。運(yùn)行成功后,nacos默認(rèn)在8848端口提供了一個(gè)web管理界面,如下:
二 、Nacos注冊(cè)中心入門(mén)
創(chuàng)建兩個(gè)工程,一個(gè)是nacos-provider(被調(diào)用者), 另一個(gè)是naocos-consumer(調(diào)用者)
- nacos-provider
添加nacos-provider的依賴
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.13.RELEASE</version><relativePath/> <!-- lookup parent from repository --> </parent><properties><java.version>1.8</java.version> </properties> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--服務(wù)發(fā)現(xiàn)依賴--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.1.2.RELEASE</version></dependency><!--服務(wù)配置依賴--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId><version>2.1.2.RELEASE</version></dependency> </dependencies> <!--SpringCloud的依賴--> <dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Greenwich.SR5</version><type>pom</type><scope>import</scope></dependency></dependencies> </dependencyManagement>provider基本代碼
@RestController public class ProviderController {@GetMapping("invoke")public String invoke() {return LocalTime.now() + " invoke;} }application.yml
server:port: 8070 spring:application:name: nacos-providercloud:# nacos服務(wù)地址nacos:server-addr: 127.0.0.1:8848在啟動(dòng)類上添加@EnableDiscoveryClient注解
- nacos-consumer
添加nacos-consumer依賴
<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.1.3.RELEASE</version><relativePath/> <!-- lookup parent from repository --> </parent> <properties><java.version>1.8</java.version> </properties> <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-openfeign</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId><version>2.1.2.RELEASE</version></dependency> </dependencies> <!--SpringCloud的依賴--> <dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Greenwich.SR5</version><type>pom</type><scope>import</scope></dependency></dependencies> </dependencyManagement>consumer基本代碼
@RestController public class ConsummerController {@Autowiredprivate ProviderFeign providerFeign;@GetMapping("/test")public String test() {return providerFeign.invoke();} } @FeignClient("nacos-provider") public interface ProviderFeign {@GetMapping("invoke")String invoke(); }application.yml
server:port: 8071 spring:application:name: nacos-consumercloud:# nacos服務(wù)地址nacos:server-addr: 127.0.0.1:8848在啟動(dòng)類添加@EnableFeignClients,@EnableDiscoveryClient注解
調(diào)用結(jié)果:
三、Nacos入門(mén)配置中心
在系統(tǒng)開(kāi)發(fā)過(guò)程中,開(kāi)發(fā)者通常會(huì)將一些需要變更的參數(shù)、變量等從代碼中分離出來(lái)獨(dú)立管理,以獨(dú)立的配置文件的形式存在。目的是讓靜態(tài)的系統(tǒng)工件或者交付物(如 WAR,JAR 包等)更好地和實(shí)際的物理運(yùn)行環(huán)境進(jìn)行適配。配置管理一般包含在系統(tǒng)部署的過(guò)程中,由系統(tǒng)管理員或者運(yùn)維人員完成。配置變更是調(diào)整系統(tǒng)運(yùn)行時(shí)的行為的有效手段。
如果微服務(wù)架構(gòu)中沒(méi)有使用統(tǒng)一配置中心時(shí),所存在的問(wèn)題:
配置文件分散在各個(gè)項(xiàng)目里,不方便維護(hù)
配置內(nèi)容安全與權(quán)限
更新配置后,項(xiàng)目需要重啟
nacos配置中心:系統(tǒng)配置的集中管理(編輯、存儲(chǔ)、分發(fā))、動(dòng)態(tài)更新不重啟、回滾配置(變更管理、歷史版本管理、變更審計(jì))等所有與配置相關(guān)的活動(dòng)
nacos與 Spring Cloud的整合:
- 1.在 Nacos Spring Cloud 中,dataId 的完整格式如下:
-
prefix 默認(rèn)為所屬工程配置spring.application.name 的值(即:nacos-provider),也可以通過(guò)配置項(xiàng) spring.cloud.nacos.config.prefix來(lái)配置;
-
spring.profile.active 即為當(dāng)前環(huán)境對(duì)應(yīng)的 profile,詳情可以參考 Spring Boot文檔。 注意:當(dāng)spring.profile.active 為空時(shí),對(duì)應(yīng)的連接符 - 也將不存在,dataId 的拼接格式變成 ${prefix}.${file-extension}
-
file-exetension 為配置內(nèi)容的數(shù)據(jù)格式,可以通過(guò)配置項(xiàng)
spring.cloud.nacos.config.file-extension 來(lái)配置。目前只支持 properties 和 yaml 類型;默認(rèn)為 properties ;
即 dataId 為 配置所屬工程的spring.application.name的值 + “.” + properties/yml;
官方文檔:
https://nacos.io/zh-cn/docs/quick-start-spring-cloud.html
https://github.com/alibaba/spring-cloud-alibaba/wiki/Nacos-config
- 2.配置內(nèi)容:項(xiàng)目中易變的內(nèi)容
從配置中心讀取配置
- 添加配置依賴:
版本說(shuō)明 https://github.com/alibaba/spring-cloud-alibaba/wiki/%E7%89%88%E6%9C%AC%E8%AF%B4%E6%98%8E
在 bootstrap.yml中配置 Nacos server 的地址和應(yīng)用名
注意:bootstrap.yml添加了spring.application.name,在appliation.yml不需要再添加;之所以需要配置 spring.application.name ,是因?yàn)樗菢?gòu)成 Nacos 配置管理 dataId字段的一部分。在springboot工程中,bootstrap.properties的加載優(yōu)先級(jí)更高
@RefreshScope @RestController public class ProviderController {@Value("${DevConfig}")private String devConfig;@GetMapping("invoke")public String invoke() {return LocalTime.now() + " invoke,devConfig:" + devConfig;} }調(diào)用結(jié)果:
- 名稱空間切換環(huán)境(相當(dāng)于使用springcloud config時(shí)的git倉(cāng)庫(kù)的作用)
在實(shí)際開(kāi)發(fā)中,通常有多套不同的環(huán)境(默認(rèn)只有public),那么這個(gè)時(shí)候可以根據(jù)指定的環(huán)境來(lái)創(chuàng)建不同的= namespce,例如,開(kāi)發(fā)、測(cè)試和生產(chǎn)三個(gè)不同的環(huán)境,那么使用一套 nacos 集群可以分別建以下三個(gè)不同的 namespace。以此來(lái)實(shí)現(xiàn)多環(huán)境的隔離;
可以發(fā)現(xiàn)有四個(gè)名稱空間(不同的項(xiàng)目之間,可以使用同一個(gè)nacos服務(wù),只需要新建命名空間就可以,無(wú)須一個(gè)項(xiàng)目配套一個(gè)nacos服務(wù))`public(默認(rèn))以及我們自己添加的3個(gè)名稱空間(prod、dev、test),可以點(diǎn)擊查看每個(gè)名稱空間下的配置文件,當(dāng)然現(xiàn)在只有public下有一個(gè)配置。默認(rèn)情況下,項(xiàng)目會(huì)到public下找 服務(wù)名.properties文件。接下來(lái),在dev名稱空間中也添加一個(gè)nacos-provider.properties配置。這時(shí)有兩種方式:
切換到dev名稱空間,添加一個(gè)新的配置文件。缺點(diǎn):每個(gè)環(huán)境都要重復(fù)配置類似的項(xiàng)目
直接通過(guò)clone方式添加配置,并修改即可(推薦)
編輯
在服務(wù)提供方nacos-provider中切換命名空間,修改bootstrap.yml添加如下配置
spring:cloud:nacos:config:namespace: 288ad42c-c8e0-4b92-b8df-7d7883ad8507namespace的值為:
重啟服務(wù),調(diào)用結(jié)果:
- 回滾配置
- 加載多配置文件
偶爾情況下需要加載多個(gè)配置文件。假如現(xiàn)在dev名稱空間下有三個(gè)配置文件:nacos-provider.properties、redis.properties、jdbc.properties
nacos-provider.properties默認(rèn)加載,怎么加載另外兩個(gè)配置文件?
在bootstrap.yml文件中添加如下配置:
spring:cloud:nacos:server-addr: 127.0.0.1:8848config:extension-configs:- refresh: truedata-id: redis.properties- refresh: truedata-id: jdbc.properties修改上面的代碼:
注意該注解:@RefreshScope 是scopeName="refresh"的 @Scope
- 配置的分組
在實(shí)際開(kāi)發(fā)中,除了不同的環(huán)境外。不同的微服務(wù)或者業(yè)務(wù)功能,可能有不同的redis及mysql數(shù)據(jù)庫(kù),也就說(shuō)每個(gè)微服務(wù)項(xiàng)目可能會(huì)有相應(yīng)的開(kāi)發(fā)環(huán)境,測(cè)試環(huán)境,預(yù)發(fā)環(huán)境,生產(chǎn)環(huán)境等;區(qū)分不同的環(huán)境我們使用名稱空間(namespace),區(qū)分不同的微服務(wù)或功能,使用分組(group)。也可以反過(guò)來(lái)使用,名稱空間和分組只是為了更好的區(qū)分配置,提供的兩個(gè)維度而已;
新增一個(gè)redis.properties,所屬分組為nacos-provider:
現(xiàn)在開(kāi)發(fā)環(huán)境中有兩個(gè)redis.propertis配置文件,一個(gè)是默認(rèn)分組(DEFAULT_GROUP),一個(gè)是provider組。默認(rèn)情況下從DEFAULT_GROUP分組中讀取redis.properties,如果要切換到nacos-provider分組下的redis.properties,需要修改如下配置:
原文地址1:https://www.cnblogs.com/coder-zyc/p/12821732.html
原文地址2:https://www.cnblogs.com/coder-zyc/p/12821777.html
原文地址3:https://www.cnblogs.com/coder-zyc/p/12821932.html
總結(jié)
以上是生活随笔為你收集整理的Nacos 入门教程的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 那些能沉淀自己的人,将会成为最后的赢家
- 下一篇: Ribbon、Feign、OpenFei