【前面的话】书接上文,本文的某些知识依赖个人上一篇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依赖:github
<parent> <artifactId>lovincloud</artifactId> <groupId>com.eelve.lovincloud</groupId> <version>1.0-SNAPSHOT</version> </parent> <modelVersion>4.0.0</modelVersion> <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>
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
package com.eelve.lovin.config; import org.springframework.context.annotation.Configuration; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter; /** * @ClassName SecurityConfig * @Description TDO * @Author zhao.zhilue * @Date 2019/8/16 14:13 * @Version 1.0 **/ @Configuration public class WebSecurityConfig extends WebSecurityConfigurerAdapter { @Override protected void configure(HttpSecurity http) throws Exception { http.authorizeRequests().anyRequest().permitAll() .and().csrf().disable(); } }
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; /** * @ClassName LovinCloudTurbineApplication * @Description TDO * @Author zhao.zhilue * @Date 2019/8/25 17:17 * @Version 1.0 * **/ @SpringBootApplication @EnableDiscoveryClient @EnableTurbine public class LovinCloudTurbineApplication { public static void main(String[] args) { SpringApplication.run(LovinCloudTurbineApplication.class,args); } }
咱们能够看到服务已经所有启动成功web
<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-cloud-starter-turbine-amqp依赖,它实际上就是包装了spring-cloud-starter-turbine-stream和pring-cloud-starter-stream-rabbit。spring
spring: rabbitmq: host: 127.0.0.1 port: 5672 username: guest password: guest
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; /** * @ClassName LovinCloudTurbineApplication * @Description TDO * @Author zhao.zhilue * @Date 2019/8/25 17:17 * @Version 1.0 * **/ @SpringBootApplication @EnableDiscoveryClient @EnableTurbineStream public class LovinCloudTurbineApplication { public static void main(String[] args) { SpringApplication.run(LovinCloudTurbineApplication.class,args); } }
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-netflix-hystrix-amqp</artifactId> <version>1.4.7.RELEASE</version> </dependency>
spring: rabbitmq: host: 127.0.0.1 port: 5672 username: guest password: guest