Spring Cloud Alibaba:Nacos 作為注冊中心和配置中心使用

Spring Cloud Alibaba 致力于提供微服務開發的一站式解決方案,Nacos 作為其核心組件之一,可以作為注冊中心和配置中心使用,本文將對其用法進行詳細介紹。

Nacos簡介

Nacos 致力于幫助您發現、配置和管理微服務。Nacos 提供了一組簡單易用的特性集,幫助您快速實現動態服務發現、服務配置、服務元數據及流量管理。

Nacos 具有如下特性:

服務發現和服務健康監測:支持基于DNS和基于RPC的服務發現,支持對服務的實時的健康檢查,阻止向不健康的主機或服務實例發送請求;

動態配置服務:動態配置服務可以讓您以中心化、外部化和動態化的方式管理所有環境的應用配置和服務配置;

動態 DNS 服務:動態 DNS 服務支持權重路由,讓您更容易地實現中間層負載均衡、更靈活的路由策略、流量控制以及數據中心內網的簡單DNS解析服務;

服務及其元數據管理:支持從微服務平臺建設的視角管理數據中心的所有服務及元數據。

使用Nacos作為注冊中心

安裝并運行Nacos

我們先從官網下載Nacos,這里下載的是nacos-server-1.1.4.zip文件,下載地址:https://github.com/alibaba/nacos/releases

配置JAVA_HOME環境變量,不配置會導致無法運行Nacos;

JAVA_HOME=D:\developer\env\Java\jdk1.8.0_91Copy to clipboardErrorCopied

解壓安裝包,直接運行bin目錄下的startup.cmd;

運行成功后,訪問http://localhost:8848/nacos可以查看Nacos的主頁,默認賬號密碼都是nacos。

創建應用注冊到Nacos

我們通過改造consul-user-service和consul-ribbon-service來演示下服務注冊與發現的功能,主要是將應用原來的Consul注冊中心支持改為Nacos注冊中心支持。

創建nacos-user-service模塊和nacos-ribbon-service模塊;

如果要使用Spring Cloud Alibaba 的組件都需要在pom.xml中添加如下的配置;

<dependencyManagement><dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.1.0.RELEASE</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement>Copy to clipboardErrorCopied

修改相關依賴,把原來的Consul注冊發現的依賴改為Nacos的:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>Copy to clipboardErrorCopied

修改配置文件application.yml,將Consul的注冊發現配置改為Nacos的:

server:

? port: 8206

spring:

? application:

? ? name: nacos-user-service

? cloud:

? ? nacos:

? ? ? discovery:

? ? ? ? server-addr: localhost:8848 #配置Nacos地址

management:

? endpoints:

? ? web:

? ? ? exposure:

? ? ? ? include: '*'Copy to clipboardErrorCopied

運行兩個nacos-user-service和一個nacos-ribbon-service,在Nacos頁面上可以看到如下信息:

負載均衡功能

由于我們運行了兩個nacos-user-service,而nacos-ribbon-service默認會去調用它的接口,我們調用nacos-ribbon-service的接口來演示下負載均衡功能。

多次調用接口:http://localhost:8308/user/1?,可以發現兩個nacos-user-service的控制臺交替打印如下信息。

2019-11-0614:28:06.458? INFO12092---[nio-8207-exec-2]c.macro.cloud.controller.UserController:根據id獲取用戶信息,用戶名稱為:macroCopy to clipboardErrorCopied

使用Nacos作為配置中心

我們通過創建nacos-config-client模塊,并在Nacos頁面中添加配置信息來演示下配置管理的功能。

創建nacos-config-client模塊

在pom.xml中添加相關依賴:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId></dependency><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>Copy to clipboardErrorCopied

添加配置文件application.yml,啟用的是dev環境的配置:

spring:

? profiles:

? ? active: devCopy to clipboardErrorCopied

添加配置文件bootstrap.yml,主要是對Nacos的作為配置中心的功能進行配置:

server:

? port: 9101

spring:

? application:

? ? name: nacos-config-client

? cloud:

? ? nacos:

? ? ? discovery:

? ? ? ? server-addr: localhost:8848 #Nacos地址

? ? ? config:

? ? ? ? server-addr: localhost:8848 #Nacos地址

? ? ? ? file-extension: yaml #這里我們獲取的yaml格式的配置Copy to clipboardErrorCopied

創建ConfigClientController,從Nacos配置中心中獲取配置信息:

/**

* Created by macro on 2019/9/11.

*/@RestController@RefreshScopepublicclassConfigClientController{@Value("${config.info}")privateStringconfigInfo;@GetMapping("/configInfo")publicStringgetConfigInfo(){returnconfigInfo;}}Copy to clipboardErrorCopied

在Nacos中添加配置

我們先來講下Nacos中的dataid的組成格式及與SpringBoot配置文件中的屬性對應關系:

${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}Copy to clipboardErrorCopied

比如說我們現在要獲取應用名稱為nacos-config-client的應用在dev環境下的yaml配置,dataid如下:

nacos-config-client-dev.yamlCopy to clipboardErrorCopied

按照以上dataid添加如下配置:

config:

? info: "config info for dev"Copy to clipboardErrorCopied

填寫配置示意圖:

啟動nacos-config-client,調用接口查看配置信息:http://localhost:9101/configInfo

config infofordevCopy to clipboardErrorCopied

Nacos的動態刷新配置

我們只要修改下Nacos中的配置信息,再次調用查看配置的接口,就會發現配置已經刷新,Nacos和Consul一樣都支持動態刷新配置。當我們在Nacos頁面上修改配置并發布后,應用會刷新配置并打印如下信息

2019-11-0614:50:49.460? INFO12372---[-localhost_8848]trationDelegate$BeanPostProcessorChecker:Bean'org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration'oftype[org.springframework.cloud.autoconfigure.ConfigurationPropertiesRebinderAutoConfiguration$$EnhancerBySpringCGLIB$$ec395f8e]is not eligibleforgetting processed by all BeanPostProcessors(for example: not eligibleforauto-proxying)2019-11-0614:50:49.608? INFO12372---[-localhost_8848]c.a.c.n.c.NacosPropertySourceBuilder:Loading nacos data, dataId:'nacos-config-client-dev.yaml', group:'DEFAULT_GROUP'2019-11-0614:50:49.609? INFO12372---[-localhost_8848]b.c.PropertySourceBootstrapConfiguration:Located property source: CompositePropertySource{name='NACOS',propertySources=[NacosPropertySource{name='nacos-config-client-dev.yaml'}, NacosPropertySource{name='nacos-config-client.yaml'}]}2019-11-0614:50:49.610? INFO12372---[-localhost_8848]o.s.boot.SpringApplication:The following profiles are active: dev2019-11-0614:50:49.620? INFO12372---[-localhost_8848]o.s.boot.SpringApplication:Started applicationin0.328seconds(JVM runningfor172.085)2019-11-0614:50:49.638? INFO12372---[-localhost_8848]o.s.c.e.event.RefreshEventListener:Refresh keys changed:[config.info]Copy to clipboardErrorCopied

參考資料

Spring Cloud Alibaba 官方文檔:https://github.com/alibaba/spring-cloud-alibaba/wiki

使用到的模塊

springcloud-learning

├── nacos-config-client -- 用于演示nacos作為配置中心的nacos客戶端

├── nacos-user-service -- 注冊到nacos的提供User對象CRUD接口的服務

└── nacos-ribbon-service -- 注冊到nacos的ribbon服務調用測試服務

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,818評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,185評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,656評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,647評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,446評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,951評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,041評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,189評論 0 287
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,718評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,602評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,800評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,316評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,045評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,419評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,671評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,420評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,755評論 2 371