【前面的話】書接上文,本文的某些知識依賴個人上一篇SpringCLoud的文章:SpringCloud之Feign,若是沒有看過能夠先移步去看一下。前文提到了hystrix的應用,以及hystrix的監控,當時咱們在實際生產過程當中每每會在多個服務中或者說網關集羣中使用hystrix,這樣咱們來監控的是否再去分別查看當時的每一個應用的話,效率就會顯得很低下呢,這裏咱們就要用的上文提到的集羣監控了。java
看單個的Hystrix Dashboard的數據並無什麼多大的價值,要想看這個系統的Hystrix Dashboard數據就須要用到Hystrix Turbine。Hystrix Turbine將每一個服務Hystrix Dashboard數據進行了整合。Hystrix Turbine的使用很是簡單,只須要引入相應的依賴和加上註解和配置就能夠了。簡而言之:Turbine就是聚合監控多個Hystrix Dashboard的數據。git
新建一個feign子工程lovin-cloud-turbine,用於後面的操做。下面是主要的pom依賴:~~~pom
<artifactId>lovin-cloud-turbine</artifactId>
<packaging>jar</packaging>
<name>lovincloudturbine</name>
<version>0.0.1</version>
<description>turbine監控</description>複製代碼
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>de.codecentric</groupId>
<artifactId>spring-boot-admin-starter-client</artifactId>
<version>2.1.6</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-turbine</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-turbine-amqp</artifactId>
<version>1.4.7.RELEASE</version>
</dependency>
-->
</dependencies>複製代碼
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
~~~
- 這裏爲了安全,我這裏仍是添加**spring-boot-starter-security**
~~~yaml
server:
port: 8808 # 服務端口號
spring:
application:
name: lovincloudturbine # 服務名稱
security:
basic:
enabled: true
user:
name: lovin
password: ${REGISTRY_SERVER_PASSWORD:lovin}
eureka:
client:
serviceUrl:
defaultZone: http://lovin:lovin@localhost:8881/eureka/ # 註冊到的eureka服務地址
instance:
leaseRenewalIntervalInSeconds: 10
health-check-url-path: /actuator/health
metadata-map:
user.name: lovin
user.password: lovin
management:
endpoints:
web:
exposure:
include: "*"
endpoint:
health:
show-details: ALWAYS
turbine:
aggregator:
clusterConfig: default # 指定聚合哪些集羣,多個使用","分割,默認爲default。可以使用http://.../turbine.stream?cluster={clusterConfig之一}訪問
appConfig: lovinfeignclient,lovinribbonclient ### 配置Eureka中的serviceId列表,代表監控哪些服務
clusterNameExpression: new String("default")
# 1. clusterNameExpression指定集羣名稱,默認表達式appName;此時:turbine.aggregator.clusterConfig須要配置想要監控的應用名稱
# 2. 當clusterNameExpression: default時,turbine.aggregator.clusterConfig能夠不寫,由於默認就是default
# 3. 當clusterNameExpression: metadata['cluster']時,假設想要監控的應用配置了eureka.instance.metadata-map.cluster: ABC,則須要配置,同時turbine.aggregator.clusterConfig: ABC複製代碼
~~~web
import org.springframework.context.annotation.Configuration;import org.springframework.security.config.annotation.web.builders.HttpSecurity;import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;spring
/**安全
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().permitAll()
.and().csrf().disable();
}
}
~~~
- 在主類上添加**@EnableTurbine**,固然也須要註冊到註冊中心:
~~~java
package com.eelve.lovin;複製代碼
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.netflix.turbine.EnableTurbine;import org.springframework.cloud.netflix.turbine.stream.EnableTurbineStream;app
/**負載均衡
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
~~~
能夠看到這裏主要引入了spring-cloud-starter-turbine-amqp依賴,它實際上就是包裝了spring-cloud-starter-turbine-stream和pring-cloud-starter-stream-rabbit。
* 添加鏈接rabbitmq配置
~~~yaml
spring:
rabbitmq:
host: 127.0.0.1
port: 5672
username: guest
password: guest
~~~
* 在應用主類中使用@EnableTurbineStream註解來啓用Turbine Stream的配置
~~~java
package com.eelve.lovin;複製代碼
import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.cloud.client.discovery.EnableDiscoveryClient;import org.springframework.cloud.netflix.turbine.EnableTurbine;import org.springframework.cloud.netflix.turbine.stream.EnableTurbineStream;異步
/**maven
---