微服務架構:動態配置中心搭建
版權聲明:本文為博主原創文章,轉載請註明出處,歡迎交流學習!
在微服務架構中,服務之間有著錯綜復雜的依賴關系,每個服務都有自己的依賴配置,在運行期間很多配置會根據訪問流量等因素進行調整,傳統的配置信息處理方式是將配置信息寫入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服務器,我們的微服務就可以動態讀取到最新的配置了。
微服務架構:動態配置中心搭建