版權聲明:本文為部落客原創文章,轉載請注明出處,歡迎交流學習!
在微服務架構中,服務之間有着錯綜複雜的依賴關系,每個服務都有自己的依賴配置,在運作期間很多配置會根據通路流量等因素進行調整,傳統的配置資訊處理方式是将配置資訊寫入xml、.properties等配置檔案中,和應用一起打包,每次修改配置資訊,都需要重新進行打包,效率極低,動态配置中心就是為了解決這一問題。動态配置中心也是一個微服務,我們把微服務中需要動态配置的配置檔案存放在遠端git私有倉庫上,微服務會去伺服器讀取配置資訊,當我們在本地修改完代碼push到git伺服器,git伺服器端hooks自動檢測是否有配置檔案更新,如果有,git服務端通過消息隊列給配置中心發消息,通知配置中心重新整理配置檔案。是以微服務讀取到的就是最新的配置資訊,實作了運作期動态配置。了解了配置中心的原理,下面來介紹應用Spring Cloud架構的configserver搭建動态配置中心的整個過程。
1、Git私有倉庫搭建
由于所有配置檔案放在Git遠端私有倉庫上,我們需要搭建Git私有倉庫。
1)安裝git
# cd /etc/yum.repos.d/
# wget http://geekery.altervista.org/geekery-el5-x86_64.repo
# cd /data/soft/
# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el5.rf.x86_64.rpm
# 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 [email protected]:microservice.git
3)在本地安裝git用戶端
以上操作完成Git服務端私有倉庫搭建後,需要在本地安裝Git用戶端,并且把公鑰加入到服務端的/.ssh/authorized_keys配置檔案中,這樣就可以在本地克隆服務端代碼并向服務端進行推送了。本地Git用戶端的安裝可參照Git教程。
2、安裝消息隊列
在遠端機器上安裝消息隊列(rabbitmq)并啟動。

3、配置中心相關配置檔案
配置中心(配置服務,例如: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配置:
4、在服務中添加消息總線依賴配置
在需要将配置檔案放到配置中心進行動态配置的服務中,添加消息總線的配置。
在服務的pom.xml檔案中添加依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
5、在Git服務端編寫服務端hook
當本地Git用戶端向服務端倉庫推送更新時,Git服務端需要檢測配置檔案是否有更新,如果有,則需要向configserver發請求通知它重新整理配置檔案。這就需要用到服務端hook。在Git服務端的/.git/hooks/目錄下,建立post-receive檔案(無字尾名),并添加相應的腳本,當Git用戶端推送更新,服務端更新完檔案後會自動執行此post-receive檔案腳本。
6、在本地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伺服器,我們的微服務就可以動态讀取到最新的配置了。