文章目錄
-
- 一、config是什麼?
- 二、怎麼使用config?
- 三、用戶端從config上擷取配置
- 四、spring cloud config 高可用
一、config是什麼?
我們既然要做項目, 那麼就少不了配置,傳統的項目還好,但是我們微服務項目, 每個微服務就要做獨立的配置, 這樣難免有點複雜, 是以, config項目出來了,它就是為了解決這個問題: 把你所有的微服務配置通過某個平台:
比如 github, gitlib 或者其他的git倉庫 進行集中化管理(當然,也可以放在本地)。
可能這樣講有點抽象,我們來看一張圖:大概是這樣一個關系
二、怎麼使用config?
剛剛講完理論, 那麼我們來實踐一下, 怎麼配置這個confi呢? 我們剛剛說過 由一個config server 來管理所有的配置檔案, 那麼我們現在建立一個config server 項目 然後引入依賴:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
spring-cloud 的依賴我們就不提了,然後啟動類上面加入注解EnableConfigServer:
@SpringBootApplication
@EnableConfigServer
@EnableEurekaClient
public class AppConfigServer {
public static void main(String[] args) {
SpringApplication.run(AppConfigServer.class);
}
}
yml配置:
server:
port: 8080
eureka:
client:
serviceUrl:
defaultZone: http://localhost:3000/eureka/ #eureka服務端提供的注冊位址 參考服務端配置的這個路徑
instance:
instance-id: config-1 #此執行個體注冊到eureka服務端的唯一的執行個體ID
prefer-ip-address: true #是否顯示IP位址
leaseRenewalIntervalInSeconds: 1
leaseExpirationDurationInSeconds: 3
spring:
application:
name: config
cloud:
config:
server:
git:
uri: https://github.com/405990230/server-demo.git #配置檔案在github上的位址
username: 1111 #連接配接git的使用者名。
password: 1111 #連接配接git的使用者名密碼。
#Configserver會在 Git倉庫根目錄、 config-file子目錄,以及所有以 bar開始的子目錄中查找配置檔案。
search-paths: config-file,bar*
#啟動時就clone倉庫到本地,預設是在配置被首次請求時,config server才會clone git倉庫
clone-on-start: true
#配置為true表示如果本地副本是髒的,将使Spring Cloud Config Server強制從遠端存儲庫拉取配置。
force-pull: true
配置好以後,我們先試試通過config server來讀取配置
這裡我在github上有一些配置檔案:
我們來看看test-config的内容:
那麼如何通過config server來通路呢?
啟動項目後, 我們可以通過名字來讀取裡面的配置資訊:
那我們要擷取dev環境/或者test環境下的配置呢? 通過-隔開即可。
我們現在來通路 test-config-dev:
同理 如果要通路test環境下的配置, 改為test即可
其實,config通路配置檔案,是需要一個具體的通路規則的, 那麼這個通路規則到底是什麼呢? 我們可以在官網找到:
/{application}/{profile}[/{label}]
/{application}-{profile}.yml
/{label}/{application}-{profile}.yml
/{application}-{profile}.properties
/{label}/{application}-{profile}.properties
application就是配置檔案的名字, profile就是對應的環境 label就是不同的分支 由這個規則可見, 我們使用的是第二種規則, 剩下的規則, 同學們可以自己去試試 , 對于yml 和properties類型config可以完美轉換, 也就是說你存的是yml 但是可以讀取為properties類型的反過來也是如此:
三、用戶端從config上擷取配置
剛剛給大家簡單示範了一下config 以及怎麼讀取配置, 不過實際開發中,更多的不是我們人為去擷取,而是由微服務從config上加載配置, 那麼, 怎麼來加載呢?
首先,我們需要在我們的微服務加入一個依賴聲明他是config的用戶端:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
需要注意的是,這個依賴不包括spring -boot依賴, 也就是說, 假設你這個項目要當作spring boot來啟動的話,還得依賴spring boot
啟動類不需要做改動, 标準的spring boot啟動類即可,需要注意的是yml檔案
以前我們對于spring boot的配置 是在application.yml裡面配置的,現在從config上讀取配置的話,還得需要一個bootstrap.yml配置檔案。
解釋一下這個bootstrap.yml:
spring cloud有一個“引導上下文"的概念,這是主應用程式的父上下文。引導上下文負責從配置伺服器加載配置屬性,以及解密外部配置檔案中的屬性。和主應用程式加載application.(yml或 properties)中的屬性不同,引導上下文加載(bootstrap.)中的屬性。配置在 bootstrap.*中的屬性有更高的優先級,是以預設情況下它們不能被本地配置。
那麼我們application.yml配置檔案裡面 隻需要做一些簡單的配置就可以了:
這裡我是通過注冊中心擷取資訊從server-config服務擷取配置資訊
spring:
application:
name: client-user
重點在于bootstrap.yml:
spring:
cloud:
config:
name: application-user #這是我們要讀取的配置檔案名 對應擷取規則的{application}
#profile: dev #這個是要擷取的環境 對應的便是{profile}
label: master #這個就是擷取的節點 對應的是{label}
discovery:
enabled: true #是否通過注冊中心服務
service-id: config #注冊中心配置服務的名詞
#uri : http://localhost:8080/ #這就是我們config server的一個位址
eureka:
client:
serviceUrl:
defaultZone: http://localhost:3000/eureka/
啟動時從server-config服務讀取配置
遠端配置application-user.yml的内容:
server:
port: 5000
eureka:
client:
serviceUrl:
defaultZone: http://localhost:3000/eureka/ #eureka服務端提供的注冊位址 參考服務端配置的這個路徑
instance:
instance-id: user-1 #此執行個體注冊到eureka服務端的唯一的執行個體ID
prefer-ip-address: true #是否顯示IP位址
leaseRenewalIntervalInSeconds: 10 #eureka客戶需要多長時間發送心跳給eureka伺服器,表明它仍然活着,預設為30 秒 (與下面配置的機關都是秒)
leaseExpirationDurationInSeconds: 30 #Eureka伺服器在接收到執行個體的最後一次發出的心跳後,需要等待多久才可以将此執行個體删除,預設為90秒
spring:
application:
name: client-user #此執行個體注冊到eureka服務端的name
feign:
hystrix:
enabled: true
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 20000 #預設逾時時間
circuitBreaker:
requestVolumeThreshold: 20
sleepWindowInMilliseconds : 5000
management:
server:
port: 5008 #自定義actuator請求接口,不配置預設就是服務端口
endpoints:
web:
exposure:
include: "*"
health:
show-details: always
我們來測試一下 看看他會不會使用這個5000端口啟動:
這裡 我們檢視啟動資訊,能發現他現在使用的是我們從config server上讀取到的配置。
然後就可以正常通路了!
四、spring cloud config 高可用
config 高可用可以通過很多種方式, 比如說搭建一個nginx:
方式二:
或者config server注冊到eureka上,client端也注冊到eureka上,則已經實作高可用
如何注冊就不提了,需要注意的點就是當config server都注冊完之後 client的配置檔案進行以下改動:
啟動兩個server-config服務,進行服務注冊
spring:
cloud:
config:
name: application-user #這是我們要讀取的配置檔案名 對應擷取規則的{application}
#profile: dev #這個是要擷取的環境 對應的便是{profile}
label: master #這個就是擷取的節點 對應的是{label}
discovery:
enabled: true
service-id: config
#uri : http://localhost:5088/ #這就是我們config server的一個位址
eureka:
client:
serviceUrl:
defaultZone: http://localhost:3000/eureka/
這樣當其中一個配置服務出問題時,會自動去另外一個服務擷取配置。
以上均為魯班學院學習資料,歡迎大家報班學習,真心推薦!