Spring Cloud Config:
配置中心為了方便服務配置文件統一管理,實時更新,所以需要分布式配置中心組件,它就是Spring Cloud Config.
在分布式系統中,由於服務數量巨多,為了方便服務配置文件統一管理,實時更新,所以需要分布式配置中心組件。在Spring Cloud中,有分布式配置中心組件spring cloud config ,它支持配置服務放在配置服務的內存中(即本地),也支持放在遠程Git倉庫中。在spring cloud config 組件中,分兩個角色,一是config server,二是config client。
服務端搭建:
第一步:創建一個springcloud的項目,重新開發,和前面幾章創建的項目沒有關系了。后期會整合起來的。pom如下:
第二步:啟動類配置: @EnableConfigServer
第三步:修改配置文件:application.yml
第四步:啟動服務端進行測試:
github上的配置文件目錄如下:
啟動項目后,訪問zuul-dev的配置文件,有兩類訪問方式:
第一種,rest訪問:
第二種:直接對應文件名稱訪問
http請求地址和存放資源文件映射如下:
- /{application}/{profile}[/{label}]
- /{application}-{profile}.yml
- /{label}/{application}-{profile}.yml
- /{application}-{profile}.properties
- /{label}/{application}-{profile}.properties
eg: config-client-dev.properties
{application}-{profile}.properties
其中 application 相當於是文件的 config-client,profile 相當於 dev
訪問方式如下:
文件名訪問如下:
這是properties后綴文件,ynl文件也是類似,大家可以自己試一下,我就不演示了
這是服務端的啟動和測試,那么我們來創建一個客戶端,來調用服務端的配置文件試一下效果.
客戶端搭建:
第一步:搭建客戶端項目:pom文件如下:
第二步:寫個測試請求
、
第三步:修改配置文件:bootstrap.yml【注意這個配置名字】
第四步:啟動測試:
啟動9008端口服務:
到這客戶端也基本上搭建完畢(這只是springcloud的入門學習。不會介紹很深,后期的整合應用會更進一步去介紹他們的用法)
請求流程:
注意:
config 客戶端啟動會經常報 8888錯誤?
問題解決:
通過啟動日志可以發現:服務還是去 默認端口8888取配置中心的文件;這是怎么回事呢。其實就是一個配置文件優先級的問題;SpringCloud里面有個“啟動上下文”,主要是用於加載遠端的配置,也就是加載ConfigServer里面的配置,默認加載順序為:加載bootstrap.*里面的配置 --> 鏈接configserver,加載遠程配置 --> 加載application.*里面的配置; 總結:這里需要借助於“啟動上下文”來處理加載遠程配置;
所以只要將配置文件改為bootstrap.properties或bootstrap.yml
文件即可(這也是我上面為啥給配置文件命名bootstrap的原因)
config的高可用:
上面已經介紹了服務如何從配置中心讀取文件,配置中心如何從遠程git讀取配置文件,當服務實例很多時,都從配置中心讀取文件,這時可以考慮將配置中心做成一個微服務,將其集群化,從而達到高可用,架構圖如下:
我來演示怎么搭建向服務中心注冊的配置中心:(向enreka注冊,在前面我已經介紹了,現在只不過把配置中心化的服務端和客戶端做成一個微服務,向enreka進行注冊)
我的服務中心9000,在前面幾篇博客都是在用9000作為服務中心,現在我從新把它啟動作為注冊中心。讓config-server 和config-client 注冊到9000上:
修改config-server:
第一步:修改pom文件,把enreka的客戶端加進來:
第二步:啟動類加上向服務器注冊的注解標簽:
第三步:修改配置文件,向9000注冊:
修改config-client :
步奏與上面一直, 我就不重復粘貼了,唯一不同的是修改config-server 時修改的是application.yml。config-client 修改的 bootstrap.yml文件
修改完成后啟動注冊中心,config-server,和config-client,訪問9000端口測試如下:
訪問測試如下:
到這高可用的基本模型搭建出來了。注意這里的高可用應該是config-server做一個集群,供客戶端訪問從而進行負載均衡,保證請求的響應,但是我只是介紹這種概念,就不再建config-server的集群來演示了。大家明白高可用是通過集群來實現的就可以了,如果后期需要我會在高級課程中再介紹