之前在學習cloud的時候,也接觸到了nacos,只不過那時候更多的是測試了nacos和cloud的無縫連接,也就是nacos能夠集成cloud的一些落地技術棧,例如Feign、Ribbon等,包括cloud里面的一些注解,測試demo也上傳到了git上面。
https://github.com/wcyzxs/nacos-demo.git
這次正好跟着b站上面的項目,進一步對nacos進行了學習。先簡單介紹下nacos吧,nacos是阿里巴巴下面的一套微服務框架,而cloud則是spring下面的一套微服務框架,現在更多的偏向使用nacos來作為項目的微服務架構。
就我個人而言,覺得nacos之所以越來越流行,有兩點優勢吧。1.cloud的eureka在18年就已經不在維護了,社區活躍度也許久沒有更新了。而nacos也是具有服務注冊與發現這個功能的。2.某個微服務部署成集群的話,那么要是修改一個配置,那么所有服務上面的配置都要更改,是比較麻煩的。而nacos的其中一個很大的優勢就是能夠統一管理服務的配置文件,可以實現配置的實時動態獲取,以及配置共享。意思就是說如果我5個服務的配置都是一樣的,那么我在nacos上面配置一個配置文件,然后5個服務可以統一引入該配置,並且要是修改信息的話,我們只需要在nacos上面修改即可。對應的微服務項目只要加個注解就可以實現實時獲取了,這個是真的很方便。下面就依次介紹下這兩個核心功能吧。
nacos服務注冊與發現
1.引入依賴
<!--將服務注冊進nacos中--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
2.application.yml添加以下配置
spring:
cloud:
nacos:
discovery:
server-addr: 127.0.0.1:8848
3.啟動類上面添加@EnableDiscoveryClient注解
最后啟動項目,然后界面輸入127.0.0.1:8848/nacos即可,登錄進去后即可在服務管理->服務列表下面就可以發現被注冊的服務。(這里關於nacos的安裝我就不說了,網上也有教程)
nacos的統一配置管理
在介紹nacos配置管理之前,先簡單介紹下nacos關於配置的幾個相關概念,如命名空間、組。
/
* 1)、命名空間:配置隔離;
* 默認:public(保留空間);默認新增的所有配置都在public空間。可以有兩種不同命名形式
* 1、開發,測試,生產:利用命名空間來做環境隔離。
* 注意:在bootstrap.properties;配置上,需要使用哪個命名空間下的配置,
* spring.cloud.nacos.config.namespace=9de62e44-cd2a-4a82-bf5c-95878bd5e871
* 2、每一個微服務之間互相隔離配置,每一個微服務都創建自己的命名空間,只加載自己命名空間下的所有配置
* 2)、配置集:所有的配置的集合
* 3)、配置集ID:類似文件名;也就是nacos上面的Data ID
* Data ID:類似文件名
* 4)、配置分組:
* 默認所有的配置集都屬於:DEFAULT_GROUP;
* 可以根據需要,自行再建組
* 項目中的使用:每個微服務創建自己的命名空間,使用配置分組區分環境,dev,test,prod
* 3、同時加載多個配置集
* 1)、微服務任何配置信息,任何配置文件都可以放在配置中心中
* 2)、只需要在bootstrap.properties說明加載配置中心中哪些配置文件即可
* 3)、@Value,@ConfigurationProperties。。。
* 以前SpringBoot任何方法從配置文件中獲取值,都能使用。
* 配置中心有的優先使用配置中心中的,
*
*例如
*#配置命名空間
*#spring.cloud.nacos.config.namespace=c88cfe3a-4a32-420c-be50-c3f086852e6f
*#配置分組(當命名空間按照微服務划分的時候,我們可以建立多個組,用來歸類開發、測試、生產環境)
*#spring.cloud.nacos.config.group=dev
*/
下面開始具體使用
1.引入依賴
<!--nacos配置中心--> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency>
2.創建一個bootstrap.properties文件
spring.application.name=項目名
spring.cloud.nacos.config.server-addr=127.0.0.1:8848
3.在登錄進127.0.0.1:8848/nacos的那個界面后,添加配置
配置的名稱,其實在項目啟動的時候,即可知道nacos默認讀取項目的配置是項目名.properties,所以添加配置的時候,也可以直接項目名.properties的形式添加。(yml也可以),並在里面添加配置信息。
4.在bootstrap.properties里面引入nacos上面的配置(具體可以根據實際場景,決定怎么使用命名空間,我下面的是以服務作為命名空間,組作為dev、test、prod的區分)
spring.application.name=gulimall-coupon spring.cloud.nacos.config.server-addr=127.0.0.1:8848 #配置命名空間 spring.cloud.nacos.config.namespace=c88cfe3a-4a32-420c-be50-c3f086852e6f #配置分組 spring.cloud.nacos.config.group=dev
5.獲取配置
SpringBoot任何方法從配置文件中獲取值,都能使用。
傳統的一個yaml里面可能配置了數據源、mybatis、redis等相關信息的配置集,那么現在有了命名空間和組的概念,我們可以將其分離,比如datasource.yml,mybatis.yml等,隨后在bootstrap.properties里面一個個引入即可,如下面所示。這樣還有一個好處是我這個datasource.yml可以實現共享,倘若微服務沒有分庫,那么可以多個微服務引用同一個數據源,還是比較方便的。
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yml spring.cloud.nacos.config.ext-config[0].group=dev #動態刷新,這樣在nacos上面更改配置的話,就可以實時刷新了,默認值是false spring.cloud.nacos.config.ext-config[0].refresh=true spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yml spring.cloud.nacos.config.ext-config[1].group=dev spring.cloud.nacos.config.ext-config[1].refresh=true
總結:個人而言,覺得nacos的服務注冊發現以及配置管理還是挺不錯的,自己也在慢慢摸索,繼續努力吧!