SpringCloud之Hystrix Dashbord監控中心+分布式配置中心


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/

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM