??回憶一下,在前面的文章中,我們使用了spring cloud eureka/ribbon/feign/hystrix/zuul搭建了一個完整的微服務系統,不管是隊內還是對外都已經比較完善了,那我們的系統是否還有值得繼續優化的地方呢?答案肯定是有的,那就是分布式配置中心config.那什么是分布式配置中心,我們為什么又需要分布式配置中心呢?
什么是分布式配置中心?
??所謂配置中心,就是將配置的數據放在某種存儲介質中,該介質可以是文件/數據庫/中間件等等,像業界常用的zookeeper/Apollo/阿里開源的Nacos等等,阿里內部使用的config server/diamond/switch等等都是分布式配置中心.而在spring cloud中的分布式配置中心就是config.
為什么需要分布式配置中心?
??一個完整的微服務系統,在實際的生產環境中會有許多的服務,每個服務都有自己的配置文件,這些服務在自己的測試環境上管理自己的配置文件還好,但所有服務一旦到了生產環境,配置文件太多,對配置文件的管理就成了一個必不可少的工作,因此,我們需要分布式配置中心來幫助我們進行配置文件的管理.
spring cloud config使用
??spring cloud和eureka類似,也分為服務端和客戶端,服務的主要是對配置文件進行管理,而客戶端拉取服務端的配置文件,另外,我們之前說配置中心依賴于某種存儲介質,springcloud官方文檔中是使用git,因此我們還需要依賴git,首先我們在git創建一個專門存放配置文件的倉庫:
??可以看到,我們使用的是yml,而在之前的文章中,我們一直使用的是properties配置文件,springboot中這兩者都可以,spring官方更推薦使用yml,因此我們使用config的時候,會全部替換為yml文件.
??新增一個spring cloud config的服務端module:
??老規矩,先加入父項目:
??然后配置maven依賴:
??我們的config-server也需要進行安全驗證,因此也使用了security,接下來配置文件:
??其中最重要的就是配置了git的地址,告訴config-server,從哪里去讀取配置文件.然后啟動類新增支持config-server的注解:
??然后啟動config-server:
??可以看到,我們成功訪問到了git上的配置文件,另外地址欄中的URL遵循如下規則:
??其中,application指的是配置文件的文件名,profile是配置文件的激活的版本,label是git的分支版本,默認為master.
??接下來,我們改造eureka-server,從git上讀取配置文件.首先需要上傳相應的配置文件:
??可以看到test和product的主要區別是端口號和應用名以及驗證信息不同,稍后我們會驗證一下,接下來,我們復制一份[dhp-micro-eureka-server]到新的module[dhp-micro-eureka-server-config],用于從git讀取并加載配置:
??可以看出,我們刪除了之前的配置文件,轉而使用了bootstrap.yml文件,有的同學會問,bootstrap.yml是什么文件?這是springboot的約定,我們說springboot是約定大于配置,springboot約定系統級相關的配置放到bootstrap.yml中,而application.yml進行應用級的配置,我們來看看bootstrap.yml的內容:
??主要就是設置配置文件的獲取地址,以及獲取的文件名以及profile/label(分支名)/賬號密碼等信息,配置后啟動可以看到:
??可以看到,控制臺打印的第一句就是告訴我們從localhost:7101獲取配置,啟動成功后啟動producer服務看一下:
??可以看到,我們的producer服務已經注冊到eureka-server了,說明我們的config已經生效了,同理我們也可以替換consumer/user/producer服務的配置文件為git配置文件,這里我們就不一一演示了,感興趣的童鞋們可以自己去操作試一下.另外,由于改造后的所有服務都是從config-server獲取配置文件,假如config-server掛了,那整個微服務就無法啟動了,因此config-server也需要考慮高可用,因此我們可以把config-server注冊到eureka-server中,保證config-server的高可用,注意,這里的eureka-server和producer等業務微服務注冊的eureka-server是不同的,這個eureka-server僅僅只注冊config-server一個,這就能保證config-server的高可用了.
??自此,我們的分布式配置中心config已經成功了,思考一下,目前的config-server是否有什么問題?這就是我們下一篇文章的內容,下一篇文章,我們會介紹spring cloud最后一塊拼圖,spring cloud消息總線,敬請期待!
本文由博客一文多發平臺 OpenWrite 發布!