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