版權聲明:本文爲博主原創文章,轉載請註明出處,歡迎交流學習!git
在微服務架構中,服務之間有着錯綜複雜的依賴關係,每一個服務都有本身的依賴配置,在運行期間不少配置會根據訪問流量等因素進行調整,傳統的配置信息處理方式是將配置信息寫入xml、.properties等配置文件中,和應用一塊兒打包,每次修改配置信息,都須要從新進行打包,效率極低,動態配置中心就是爲了解決這一問題。動態配置中心也是一個微服務,咱們把微服務中須要動態配置的配置文件存放在遠程git私有倉庫上,微服務會去服務器讀取配置信息,當咱們在本地修改完代碼push到git服務器,git服務器端hooks自動檢測是否有配置文件更新,若是有,git服務端經過消息隊列給配置中心發消息,通知配置中心刷新配置文件。所以微服務讀取到的就是最新的配置信息,實現了運行期動態配置。理解了配置中心的原理,下面來介紹應用Spring Cloud框架的configserver搭建動態配置中心的整個過程。spring
一、Git私有倉庫搭建服務器
因爲全部配置文件放在Git遠程私有倉庫上,咱們須要搭建Git私有倉庫。架構
1)安裝gitapp
# cd /etc/yum.repos.d/框架
# wget http://geekery.altervista.org/geekery-el5-x86_64.repossh
# cd /data/soft/微服務
# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpmpost
# rpm -ivh rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm學習
# yum -y install git
# git --version
2)搭建git倉庫
a、建立一個git用戶,用來運行git服務
命令:$ sudo adduser git
b、建立證書登陸
收集全部須要登陸的用戶的公鑰,就是他們本身的id_rsa.pub文件,把全部公鑰加入到/home/git/.ssh/authorized_keys文件裏,一行一個。
c、初始化git倉庫
選定或建立一個目錄做爲Git倉庫,如:/home/git/microservice.git,將此目錄初始化爲git倉庫
命令:$ sudo git init --bare microservice.git
$ sudo chown -R git:git microservice.git
d、克隆遠程倉庫
命令:$ git clone git@192.168.0.136:microservice.git
3)在本地安裝git客戶端
以上操做完成Git服務端私有倉庫搭建後,須要在本地安裝Git客戶端,而且把公鑰加入到服務端的/.ssh/authorized_keys配置文件中,這樣就能夠在本地克隆服務端代碼並向服務端進行推送了。本地Git客戶端的安裝可參照Git教程。
二、安裝消息隊列
在遠程機器上安裝消息隊列(rabbitmq)並啓動。
三、配置中心相關配置文件
配置中心(配置服務,例如:sample-config)的配置文件application.yml,添加以下配置:
1)configserver的git配置
configserver根據配置的Git服務器地址,去服務器上讀取相應的配置文件信息。
uri: 用戶名、遠程Git服務器地址、私有倉庫地址
username: Git服務器用戶名(搭建倉庫時建立的用戶)
password: 用戶密碼
2)消息隊列配置
當Git服務端檢測到配置文件有更新時,會經過消息隊列通知configserver刷新配置文件。
rabbitmq配置:
host: 消息隊列的地址
port: 消息隊列端口
username: 用戶名
password: 密碼
3)Dockerfile配置
因爲採用ssh協議訪問Git服務器時,須要手動輸入確認鏈接信息,所以在這裏咱們須要屏蔽此檢查。咱們須要新建一個配置文件config(無後綴名)跟Dockerfile一塊兒放在容器中,並在Dockerfile中進行配置(新建/.ssh目錄,將config文件添加到此目錄下)。
部署在容器中的文件:
config文件配置:
Dockerfile配置:
四、在服務中添加消息總線依賴配置
在須要將配置文件放到配置中心進行動態配置的服務中,添加消息總線的配置。
在服務的pom.xml文件中添加依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
五、在Git服務端編寫服務端hook
當本地Git客戶端向服務端倉庫推送更新時,Git服務端須要檢測配置文件是否有更新,若是有,則須要向configserver發請求通知它刷新配置文件。這就須要用到服務端hook。在Git服務端的/.git/hooks/目錄下,建立post-receive文件(無後綴名),並添加相應的腳本,當Git客戶端推送更新,服務端更新完文件後會自動執行此post-receive文件腳本。
六、在本地Git客戶端提交修改並推送到Git服務端
在本地更新配置文件後,提交到本地Git倉庫,而後將本地更新push到Git服務端。
相關Git命令:
$ git add xxx.xml xx.yml -------將修改的配置文件xxx.xml、xx.yml添加到暫存區
$ git commit -m 「xxxxxx」-----將暫存區文件提交到本地Git倉庫
$ git push origin master ------將本地更新推送到服務端
以上就是利用configserver實現動態配置中心的整個過程,整個配置完成後就能夠在本地修改配置文件push到Git服務器,咱們的微服務就能夠動態讀取到最新的配置了。