HystrixDashbord
Hystrix(注意 是單純的Hystrix) 提供了對於微服務調用狀態的監控(信息), 但是,需要結合spring-boot-actuator 模塊一起使用。
在包含了 hystrix的項目中, 引入依賴:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>
這時候訪問/actuator/hystrix.stream 便可以看見微服務調用的狀態信息
需要注意的是, 在Spring Finchley 版本以前訪問路徑是/hystrix.stream,如果是Finchley 的話 還得在yml里面加入以下配置,因為spring Boot 2.0.x以后的Actuator 只暴露了info 和health 2個端點,這里我們把所有端點開放。
management: endpoints: web: exposure: include: '*'
訪問/hystix.stream會出現如圖情況
這里會發現沒有任何信息, 因為我剛啟動項目, 我們來調用幾個接口看看:
這些密密麻麻的,就是我們的微服務監控的信息, 但是, 這種json格式的字符串, 難免會讓人不太好閱讀, 所以, 這時候需要我們的主角登場了:HystrixDashbord
什么是HystrixDashbord/如何使用?
Dashbord 翻譯一下的意思是 儀表盤, 顧名思義, hystrix監控信息的儀表盤, 那這個儀表盤到底是什么樣子呢?以及 怎么來使用呢?
我們新建一個項目 加入依賴:
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId> </dependency>
在spring boot啟動類上面加入注解EnableHystrixDashboard
@SpringBootApplication @EnableHystrixDashboard public class AppHystrixDashbord { public static void main(String[] args) { SpringApplication.run(AppHystrixDashbord.class); } }
啟動項目后訪問/hystrix能看見一個類似tomcat的首頁:
在中間這個輸入框中,填入需要監控的微服務的監控地址 也就是/actuator/hystrix.stream點擊按鈕,就會跳轉到儀表盤頁面:
當然, 如果你微服務沒有發生過調用, 那么這個頁面就會一直顯示加載中, 我這里是調用后的效果。
Hystrix儀表盤解釋:
實心圓:共有兩種含義。它通過顏色的變化代表了實例的健康程度,它的健康度從綠色,該實心圓除了顏色的變化之外,它的大小也會根據實例的請求流量發生變化,流量越大該實心圓就越大。所以通過該實心圓的展示,就可以在大量的實例中快速的發現故障實例和高壓力實例。
曲線:用來記錄2分鍾內流量的相對變化,可以通過它來觀察到流量的上升和下降趨勢。
Spring-Cloud-Config
config是什么?
我們既然要做項目, 那么就少不了配置,傳統的項目還好,但是我們微服務項目, 每個微服務就要做獨立的配置, 這樣難免有點復雜, 所以, config項目出來了,它就是為了解決這個問題: 把你所有的微服務配置通過某個平台:
比如 github, gitlib 或者其他的git倉庫 進行集中化管理(當然,也可以放在本地)
大概結構流程關系如下圖:
怎么使用config?
創建一個config server來管理項目的所有配置文件,那新建一個config server服務,引入依賴及spring-cloud 的依賴
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-config-server</artifactId> </dependency>
然后啟動類上面加入注解EnableConfigServer:
@SpringBootApplication @EnableConfigServer public class AppConfig { public static void main(String[] args) { SpringApplication.run(AppConfig.class); } }
yml配置:
server: port: 8080 spring: application: name: test cloud: config: server: git: uri: https://github.com/513667225/my-spring-cloud-config.git #配置文件在github上的地址 # search-paths: foo,bar* #Configserver會在 Git倉庫根目錄、 foo子目錄,以及所有以bar開始的子目錄中查找配置文件。 # clone-on-start: true #啟動時就clone倉庫到本地,默認是在配置被首次請求時,configserver才會clone git倉庫 #native: #search-locations: classpath:/config #若配置中心在本地,本地的地址
配置好以后,可以先試試通過config server來讀取配置。
提前在GitHub上傳一些配置文件以便測試
我們來看看GitHub上的test-config配置文件的內容:
接下來就是通過config server來訪問讀取這個配置文件,如何讀取呢?
啟動config server項目后, 我們可以通過配置文件的名字來讀取里面的配置信息:
那我們要獲取dev環境或者test環境下的配置呢? 通過-隔開即可。
我們現在來訪問 test-config-dev:
其實,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 server(配置中心)可以讀取到遠程的配置。那接下來就需要客戶端獲取配置就OK了。
客戶端從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配置文件里面 只需要做一些簡單的配置就可以了:
spring: application: name: test-config
重點在於bootstrap.yml:
spring: cloud: config: name: test-config #這是我們要讀取的配置文件名 對應獲取規則的{application} profile: dev #這個是要獲取的環境 對應的便是{profile} label: master #這個就是獲取的節點 對應的是{label} uri: http://localhost:8080/ #這就是我們config server的一個地址
那么 他就會獲取到我們剛剛看到的那個配置:
server: port: 8201 spring: profiles: dev application: name: test-cloud-dev-2.0
我們來測試一下 看看他會不會使用這個8201端口啟動
這里 我們查看啟動信息,能發現他現在使用的是我們從config server上讀取到的配置。
spring cloud config 高可用
config 高可用可以通過很多種方式, 比如說搭建一個nginx:
或者config server注冊到eureka上,client端也注冊到eureka上,則已經實現高可用
如何注冊就不提了,需要注意的點就是當config server都注冊完之后 client的配置文件進行以下改動:
spring: cloud: config: name: test-config profile: dev label: master discovery: enabled: true service-id: test-config eureka: client: serviceUrl: defaultZone: http://localhost:3000/eureka/