HystrixDashboard 前面已经知道了,它的主要功能是可以对某一项微服务进行监控,但真实情况下,不可能只对某一个服务进行监控,更多的是对很多服务进行一个整体的监控,这个时候就需要使用到turbine来完成了。

    为了演示监控多个服务模块,这个时候新建一个模块【microcloud-provider-user-hystrix】,为简单起见,这个模块并不连接数据库,也不做安全控制。

    【microcloud-provider-user-hystrix】pom文件如下
    <?xml version=”1.0” encoding=”UTF-8”?>
    xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance
    xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

    springcloud
    enjoy
    1.0-SNAPSHOT

    4.0.0

    microcloud-provider-user-hystrix


    enjoy
    microcloud-api


    org.springframework.boot
    spring-boot-starter-web


    org.springframework.boot
    spring-boot-starter-test
    test


    org.springframework.boot
    spring-boot-devtools


    org.springframework.cloud
    spring-cloud-starter-netflix-eureka-client


    org.springframework.boot
    spring-boot-starter-actuator


    org.springframework.cloud
    spring-cloud-starter-netflix-hystrix




    【microcloud-api】新增一个VO类:Users
    package cn.enjoy.vo;
    import java.io.Serializable;

    public class Users implements Serializable {
    private String name;
    private int age;
    private String sex;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public int getAge() {
    return age;
    }
    public void setAge(int age) {
    this.age = age;
    }
    public String getSex() {
    return sex;
    }
    public void setSex(String sex) {
    this.sex = sex;
    }
    }


    【microcloud-provider-user-hystrix】 新建一个UserController
    package cn.enjoy.controller;

    import cn.enjoy.vo.Users;
    import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;

    @RestController
    @RequestMapping(“/users”)
    public class UserController {
    @RequestMapping(“/get/{name}”)
    @HystrixCommand
    public Object get(@PathVariable(“name”)String name) {
    Users users = new Users();
    users.setName(name);
    users.setAge(18);
    users.setSex(“F”);
    return users;
    }
    }


    【microcloud-provider-user-hystrix】新增启动类
    package cn.enjoy;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

    @SpringBootApplication
    @EnableCircuitBreaker
    @EnableEurekaClient
    public class UsersApp {
    public static void main(String[] args) {
    SpringApplication.run(UsersApp.class,args);
    }
    }


    【microcloud-provider-user-hystrix】修改application.yml配置文件
    server:
    port: 8090

    spring:
    application:
    name: microcloud-provider-users


    logging:
    level:
    cn.enjoy.mapper: debug

    eureka:
    client: # 客户端进行Eureka注册的配置
    service-url:
    defaultZone: http://admin:enjoy@eureka1:7001/eureka,http://admin:enjoy@eureka2:7002/eureka,http://admin:enjoy@eureka3:7003/eureka
    instance:
    instance-id: microcloud-provider-users
    prefer-ip-address: true
    lease-renewal-interval-in-seconds: 2 # 设置心跳的时间间隔(默认是30秒)
    lease-expiration-duration-in-seconds: 5 # 如果现在超过了5秒的间隔(默认是90秒)



    info:
    app.name: microcloud-provider-users
    company.name: enjoy
    build.artifactId: $project.artifactId$
    build.modelVersion: $project.modelVersion$

    management:
    endpoints:
    web:
    exposure:
    include: ‘*’


    启动后:
    访问地址:http://localhost:8090/users/get/enjoy
    hystrix监控地址:http://localhost:8090/actuator/hystrix.stream

    前面准备工作完成后,如果想要实现 turbine 的配置,准备一个turbine模块

    新增【microcloud-consumer-turbine】模块,pom文件如下

    <?xml version=”1.0” encoding=”UTF-8”?>
    xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance
    xsi:schemaLocation=”http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd”>

    springcloud
    enjoy
    1.0-SNAPSHOT

    4.0.0

    microcloud-consumer-turbine

    UTF-8




    org.springframework.cloud
    spring-cloud-starter-netflix-turbine




    【microcloud-consumer-turbine】修改application.yml配置文件
    server:
    port: 9101
    eureka:
    client:
    register-with-eureka: false
    service-url:
    defaultZone: http://admin:enjoy@eureka1:7001/eureka,http://admin:enjoy@eureka2:7002/eureka,http://admin:enjoy@eureka3:7003/eureka

    turbine:
    app-config: MICROCLOUD-PROVIDER-PRODUCT,MICROCLOUD-PROVIDER-USERS
    cluster-name-expression: new String(“default”)

    可以发现对于turbine,其实是从eureka配置在app-config中服务,然后进行监控

    【microcloud-consumer-turbine】 新建一个启动类
    package cn.enjoy;
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.turbine.EnableTurbine;

    @SpringBootApplication
    @EnableTurbine
    public class TurbineApp {
    public static void main(String[] args) {
    SpringApplication.run(TurbineApp.class,args);
    }
    }



    turbine监控地址:

    启动Dashboard: http://localhost:9001/hystrix
    在Dashboard里面填上 turbine监控地址


    Turbine - 图1

    发现目前turbine只监控了UserController的信息,看下turbine后台发现报错
    Turbine - 图2

    其实原因也很简单,User服务并不需要用户验证,所以能正常访问,但对于Product服务,配置了用户名密码的,turbine肯定无法访问

    【microcloud-security】如果现在需要turbine进行加密服务的访问,那么只能折衷处理,让访问/actuator/hystrix.stream与/turbine.stream这两个地址的时候不需要用户密码验证
    【microcloud-security】 修改WebSecurityConfiguration

    package cn.enjoy.config;

    import org.springframework.context.annotation.Configuration;
    import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
    import org.springframework.security.config.annotation.web.builders.HttpSecurity;
    import org.springframework.security.config.annotation.web.builders.WebSecurity;
    import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
    import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
    import org.springframework.security.config.http.SessionCreationPolicy;
    import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder;

    @Configuration
    @EnableWebSecurity
    public class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(AuthenticationManagerBuilder auth)
    throws Exception {
    auth.inMemoryAuthentication().passwordEncoder(new BCryptPasswordEncoder()).withUser(“root”).password(new BCryptPasswordEncoder().encode(“enjoy”)).roles(“USER”).
    and().withUser(“admin”).password(new BCryptPasswordEncoder().encode(“enjoy”)).roles(“USER”, “ADMIN”);
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
    http.httpBasic().and().authorizeRequests().anyRequest()
    .fullyAuthenticated();
    http.sessionManagement()
    .sessionCreationPolicy(SessionCreationPolicy.STATELESS);
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
    web.ignoring().antMatchers(“/actuator/hystrix.stream”,”/turbine.stream”) ;
    }
    }


    turbine监控地址:http://localhost:9101/turbine.stream

    启动Dashboard: http://localhost:9001/hystrix
    在Dashboard里面填上 turbine监控地址

    刷新:
    http://localhost:8080/prodcut/get/1
    http://localhost:8090/users/get/1

    Turbine - 图3