springcloud 配置詳解?在使用springcloud做項目,我們會把原有的各個模塊需要拆分成多個服務,服務數據數量多,且很多的配置内容重複,且維護的代價太高比如修改數據庫的ip,修改了某個中間件的ip,這就需要修改每個涉及到這個配置的服務,可想而知需要做多少的重複工作,而且手動修改還十分容易出錯 使用配置中心就可以讓維護人員隻修改一個地方(一般是使用git),并主動通知對應的服務,取更新拉取最新的配置,下面我們就來聊聊關于springcloud 配置詳解?接下來我們就一起去了解一下吧!
在使用springcloud做項目,我們會把原有的各個模塊需要拆分成多個服務,服務數據數量多,且很多的配置内容重複,且維護的代價太高。比如修改數據庫的ip,修改了某個中間件的ip,這就需要修改每個涉及到這個配置的服務,可想而知需要做多少的重複工作,而且手動修改還十分容易出錯。 使用配置中心就可以讓維護人員隻修改一個地方(一般是使用git),并主動通知對應的服務,取更新拉取最新的配置。
1.配置中心架構圖2.流程說明各個服務的配置信息,統一集中在git倉庫進行管理,并創建一個config-server服務作為"中間人",來處理服務和git之間的關系,消息總線用在動态更新時使用,這裡使用rabbitmq。 1.當服務啟動時候,會取config-server獲取服務所需的配置信息 2.config-server會主動取git倉庫拉取最新的配置,并緩存在本地倉庫中 3.服務得到最新配置後,也會将配置加載到本地進行緩存,并加載初始化工作,最後啟動服務
3.消息總線隻要服務沒有進行重啟,服務會運行期間都是回去的本地配置緩存,若此時修改了git倉庫中的配置信息,如何及時通知到對應的服務并更新服務配置呢?這時候消息總線就起到了作用。 配置中心提供了一些動态刷新配置的接口,當我們修改了git配置,調用對應的接口,即可刷新對應服務的配置信息,當然前提是各服務,config-server連接的是同一個rabbitmq地址,因為消息的通知是通過mq隊列處理的。
4.配置中心搭建1.創建項目子模塊config-server,添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bus-amqp</artifactId>
</dependency>
啟動類添加注釋 @EnableEurekaClient @EnableConfigServer 主要是配置注冊中心eureka客戶端,配置中心config-server服務端,還有rabbitmq消息總線
2.配置文件 <1>創建bootstrap.yml文件
server:
port: 8762
spring:
application:
name: config-server
profiles:
active: @spring.active@
cloud:
bus:
enabled: true
trace:
enabled: true
config:
name: spring-admin,rabbitmq
server:
git:
uri: git地址 # 配置git倉庫的地址
username: 賬号 # git倉庫的賬号
password: 密碼 # git倉庫的密碼
searchPaths: /*,/*/*,/*/*/*
clone-on-start: true
force-pull: true
repos:
xxx:
pattern: xxx*
uri: git地址
searchPaths: /*,/*/*,/*/*/*
clone-on-start: true
force-pull: true
management:
endpoints:
web:
base-path: /
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS
這裡配置了兩個倉庫地址,供兩個項目一起使用,如果隻要一個項目,删除内層repos節點即可
簡單說明下幾個節點的含義:
spring.cloud.config.name:表示需要拉取配置文件的前綴,下面會講到規則 searchPaths:表示需要在git倉庫掃描的路徑 force-pull:表示強制拉取,可以防止本地文件修改導緻更新失敗
<2>添加application文件
這裡配置了不同環境的配置文件,每個都是配置了rabbitmq的信息,主要是為了消息總線使用
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: xxxx
password: xxxx
1.添加依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-client</artifactId>
</dependency>
2.客戶端服務新建配置文件bootstrap.yml
server:
port: 8060
spring:
application:
name: xxx #服務名稱
profiles:
active: @spring.active@
cloud:
bus:
enabled: true
trace:
enabled: true
config:
fail-fast: true
name: xx1,xx2,xx3
enabled: true #開啟配置
profile: @spring.active@ #版本
label: master #git配置的分支信息,master類似的
discovery:
enabled: true
service-id: config-server
當然也需要在application.yml文件中配置mq信息和其他自己所需的信息 簡單說明下幾個節點的含義:
label:拉取git那個分支信息 service-id:配置中心服務名,通過注冊中心來管理調用信息
6.加載規則說明git配置文件存在形式,根目錄為不同的類型的目錄,例如rabbitmq,mysql等,以下為rabbitmq目錄下的文件列表
各個微服務加載git上的配置文件,默認加載的文件名規則為:應用名稱-環境變量.yml # {spring.application.name}- s p r i n g . a p p l i c a t i o n . n a m e − {spring.cloud.config.profile}-${spring.cloud.config.label} 當然我們也可以自定義應用名稱前綴,name包含多個值,用逗号分隔
若profile的值為dev,則加載的配置文件為feign-hystrix-dev.yml,db-dev.yml等 配置客戶端每次在啟動的時候,會加載服務端的配置文件。
7.動态刷新配置問題1:修改git配置文件,不重啟任何應用的情況下,重新加配置文件? 使用postman工具,發送post請求,請求地址為: 1.重新加載所有應用配置信息:http://{config-server-ip}:8762/bus-refresh {config-server-ip}表示服務配置端ip 如果存在多個配置服務端,該刷新方式也會同時刷新其他配置服務端 2.重新加載單個應用的配置信息:http://{config-server-ip}:8762/bus-refresh/{destination} {destination}表示某個客戶端應用名稱 例如common-invoice-service
問題2:查看此時配置服務端的所加載到的配置文件 Url訪問地址: http://config-server的IP地址:8762/{label}/{filename} {label}表示git分支,例如master {filename}表示文件名稱,例如feign-hystrix-dev.yml
8.啟動順序首先啟動eureka注冊中心,其次啟動config-server配置中心,最後到各個不同的服務,因為所有的服務都依賴與這兩個服務,否則無法正常啟動。啟動日志看到拉取信息說明成功
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!