zoukankan      html  css  js  c++  java
  • 熔断监控Turbine

    step1:修改hosts的ip地址映射,创建eureka集群

    可参考:https://www.cnblogs.com/noneplus/p/11374883.html

    1566470732819

    step2:创建服务提供者

    1566470779306

    • pom依赖
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             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">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>zkrun.top</groupId>
        <artifactId>msc-provider-5001</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.7.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
        </properties>
    
        <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-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
            <!--        Eureka客户端启动需要依赖web模块-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-ribbon</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-netflix-hystrix</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    
    </project>
    
    • application.yaml
    server:
      port: 5001
    spring:
      application:
        name: msc-provider  #应用名称
    eureka:
      client:
        service-url:
          defaultZone: http://eureka4001.com:4001/eureka/,http://eureka4002.com:4002/eureka/,http://eureka4003.com:4003/eureka/
      instance:
        instance-id: msc-provider-5001
        prefer-ip-address: true     #访问路径可以显示IP地址
    
    • controller
    package zkrun.top.controller;
    
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    @RestController
    public class TestController {
    
        @GetMapping(value = "/info/get")
        public String response()
        {
            return "msc_provider_5001";
        }
    
    
    }
    
    • 主类
    package zkrun.top;
    
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    
    @SpringBootApplication
    @EnableEurekaClient
    public class App_msc_provider_5001
    {
        public static void main(String[] args)
        {
            SpringApplication.run(App_msc_provider_5001.class, args);
        }
    }
    

    step3:创建服务消费者【重要】

    1566470894548

    • pom参考
    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             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">
        <modelVersion>4.0.0</modelVersion>
    
        <groupId>zkrun.top</groupId>
        <artifactId>msc-consumer-9001</artifactId>
        <version>1.0-SNAPSHOT</version>
    
    
    
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.1.7.RELEASE</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
    
    
        <properties>
            <java.version>1.8</java.version>
            <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
        </properties>
    
        <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-test</artifactId>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-config</artifactId>
            </dependency>
            <!--        Eureka客户端启动需要依赖web模块-->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-ribbon</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-openfeign</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
            </dependency>
        </dependencies>
    
        <dependencyManagement>
            <dependencies>
                <dependency>
                    <groupId>org.springframework.cloud</groupId>
                    <artifactId>spring-cloud-dependencies</artifactId>
                    <version>${spring-cloud.version}</version>
                    <type>pom</type>
                    <scope>import</scope>
                </dependency>
            </dependencies>
        </dependencyManagement>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </build>
    
    
    
    
    
    
    
    
    </project>
    
    • application.yaml
    server:
      port: 9001
    
    spring:
      application:
        name: consumer-9001
    
    eureka:
      client:
        serviceUrl:
          defaultZone: http://eureka4001.com:4001/eureka/,http://eureka4002.com:4002/eureka/,http://eureka4003.com:4003/eureka/
    management:
      endpoints:
        web:
          exposure:
            include: "*"
          cors:
            allowed-origins: "*"
            allowed-methods: "*"
    
    • 使用Feign作为客户端调用工具

      • service接口

      • package zkrun.top.service;
        
        import org.springframework.cloud.openfeign.FeignClient;
        import org.springframework.stereotype.Component;
        import org.springframework.web.bind.annotation.RequestMapping;
        
        @FeignClient("msc-provider")    //@FeignClient("服务名")
        @Component
        public interface Hystrix_FeignService {
        
        
            @RequestMapping(value = "/info/get")
            public String request();
        
        }
        
      • controller

        package zkrun.top.controller;
        
        
        import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
        import org.springframework.beans.factory.annotation.Autowired;
        import org.springframework.web.bind.annotation.RequestMapping;
        import org.springframework.web.bind.annotation.RequestMethod;
        import org.springframework.web.bind.annotation.RestController;
        import zkrun.top.service.Hystrix_FeignService;
        
        @RestController
        public class Hystrix_FeignController {
        
            @Autowired
            Hystrix_FeignService hystrix_feignService;
        
            @RequestMapping(value = "/feign/info/get",method = RequestMethod.GET)
            @HystrixCommand(fallbackMethod = "hystrix_fallback")
            public String request()
            {
               return this.hystrix_feignService.request();
            }
        
            public String hystrix_fallback()
            {
                return "当前服务故障,服务熔断已启动!";
        
            }
        
        }
        
      • 主类(注解有点多)

      • package zkrun.top;
        
        
        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;
        import org.springframework.cloud.netflix.hystrix.EnableHystrix;
        import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
        import org.springframework.cloud.openfeign.EnableFeignClients;
        
        @SpringBootApplication
        @EnableEurekaClient
        @EnableHystrix
        @EnableHystrixDashboard
        @EnableCircuitBreaker
        @EnableFeignClients
        public class  App_Consumer_9001
        {
           public static void main(String[] args)
           {
              SpringApplication.run(App_Consumer_9001.class, args);
           }
        }
        
        

    step4:Turbine监控服务

    • pom(spring-cloud-starter-netflix-turbine)

      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0"
               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">
          <modelVersion>4.0.0</modelVersion>
      
          <groupId>zkrun.top</groupId>
          <artifactId>msc-turbine-dashboard-8001</artifactId>
          <version>1.0-SNAPSHOT</version>
      
      
      
          <parent>
              <groupId>org.springframework.boot</groupId>
              <artifactId>spring-boot-starter-parent</artifactId>
              <version>2.1.7.RELEASE</version>
              <relativePath/> <!-- lookup parent from repository -->
          </parent>
      
      
          <properties>
              <java.version>1.8</java.version>
              <spring-cloud.version>Greenwich.SR2</spring-cloud.version>
          </properties>
      
          <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-test</artifactId>
                  <scope>test</scope>
              </dependency>
      
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-config</artifactId>
              </dependency>
              <!--        Eureka客户端启动需要依赖web模块-->
              <dependency>
                  <groupId>org.springframework.boot</groupId>
                  <artifactId>spring-boot-starter-web</artifactId>
              </dependency>
      
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-netflix-ribbon</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-openfeign</artifactId>
              </dependency>
      
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
              </dependency>
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-netflix-hystrix-dashboard</artifactId>
              </dependency>
      
              <dependency>
                  <groupId>org.springframework.cloud</groupId>
                  <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
              </dependency>
      
          </dependencies>
      
          <dependencyManagement>
              <dependencies>
                  <dependency>
                      <groupId>org.springframework.cloud</groupId>
                      <artifactId>spring-cloud-dependencies</artifactId>
                      <version>${spring-cloud.version}</version>
                      <type>pom</type>
                      <scope>import</scope>
                  </dependency>
              </dependencies>
          </dependencyManagement>
      
          <build>
              <plugins>
                  <plugin>
                      <groupId>org.springframework.boot</groupId>
                      <artifactId>spring-boot-maven-plugin</artifactId>
                  </plugin>
              </plugins>
          </build>
      
      
      
      
      
      </project>
      
    • application.yaml

    server:
      port: 8001
    
    spring:
      application:
        name: service-turbine
    
    eureka:
      client:
        serviceUrl:
          defaultZone: http://eureka4001.com:4001/eureka/,http://eureka4002.com:4002/eureka/,http://eureka4003.com:4003/eureka/
    management:
      endpoints:
        web:
          exposure:
            include: "*"
          cors:
            allowed-origins: "*"
            allowed-methods: "*"
    
    turbine:
      app-config: consumer-9002,consumer-9001
      aggregator:
        clusterConfig: default
      clusterNameExpression: new String("default")
      combine-host: true
      instanceUrlSuffix:
        default: actuator/hystrix.stream
    
    • 主类(注解)

    • package zkrun.top.zkrun.top;
      
      
      import org.springframework.boot.SpringApplication;
      import org.springframework.boot.autoconfigure.SpringBootApplication;
      import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
      import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
      import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
      import org.springframework.cloud.netflix.hystrix.EnableHystrix;
      import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
      import org.springframework.cloud.netflix.turbine.EnableTurbine;
      
      @SpringBootApplication
      @EnableEurekaClient
      @EnableDiscoveryClient
      @EnableHystrix
      @EnableHystrixDashboard
      @EnableCircuitBreaker
      @EnableTurbine
      public class TurbineService {
          public static void main(String[] args) {
              SpringApplication.run(TurbineService.class,args);
          }
      }
      

    测试

    启动eureka集群,provider,两个consumer

    1566471232137

    客户端正常访问

    1566471260400

    登录监控面板:

    http://localhost:8001/hystrix/

    1566471333249

    1566471354975

    使用Jmeter做访问测试:

    • 线程数1000
    • 填写http访问相关信息

    1566471392196

    1566471470247

    查看监控面板反应:

    1566471598090


    代码参考:

    https://github.com/Noneplus/JavaDev-Note/tree/master/SpringCloud代码

  • 相关阅读:
    笔记类产品会不会衰落?
    ios 性能优化概述
    一个简单的旋转加载动画设计的思路
    常用算法的C++实现
    [转]解决Ionic2 innerHTML 无法嵌入HTML
    How to debug an Angular 2 application with Chrome and VS Code
    Angularjs2-下拉列表实现(父子组件通信)
    Angular 2 HTTP Requests with Observables
    Ionic2 beta8后更新的内容
    ionic2中如何使用自动生成器
  • 原文地址:https://www.cnblogs.com/noneplus/p/11396282.html
Copyright © 2011-2022 走看看