1. 程式人生 > >微服務架構:動態配置中心搭建

微服務架構:動態配置中心搭建

pre 有著 ice zed start nbsp ack pom.xml文件 之間

版權聲明:本文為博主原創文章,轉載請註明出處,歡迎交流學習!

在微服務架構中,服務之間有著錯綜復雜的依賴關系,每個服務都有自己的依賴配置,在運行期間很多配置會根據訪問流量等因素進行調整,傳統的配置信息處理方式是將配置信息寫入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服務器,我們的微服務就可以動態讀取到最新的配置了。

微服務架構:動態配置中心搭建