欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

spring cloud之Turbine断路器聚合监控(十二)

程序员文章站 2022-07-10 18:53:36
一、博客背景 上一章讲解了针对一个微服务的断路器监控,但是微服务通常会是多个实例组成的一个集群。 倘若集群里的实例比较多,难道要挨个挨个去监控这些实例吗? 何况有时候,根据集群的需要,会动态增加或者减少实例,监控起来就更麻烦了。所以为了方便监控集群里的多个实例,springCloud 提供了一个 turbine 项目,它的作用是把一个集群里的多个实例汇聚在一个 turbine里,这个然后再在 断路器监控里查看这个 turbine, 这样就能够在集群层面进行监控啦。二、创建集群监控子模块项目......

一、博客背景

     上一章讲解了针对一个微服务的断路器监控,但是微服务通常会是多个实例组成的一个集群。 倘若集群里的实例比较多,难道要挨个挨个去监控这些实例吗? 何况有时候,根据集群的需要,会动态增加或者减少实例,监控起来就更麻烦了。
所以为了方便监控集群里的多个实例,springCloud 提供了一个 turbine 项目,它的作用是把一个集群里的多个实例汇聚在一个 turbine里,这个然后再在 断路器监控里查看这个 turbine, 这样就能够在集群层面进行监控啦。

二、创建集群监控子模块项目

spring cloud之Turbine断路器聚合监控(十二)

三、修改pom文件

引入以下依赖

<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-web</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>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-turbine</artifactId>
        </dependency>
        <dependency>
            <groupId>cn.hutool</groupId>
            <artifactId>hutool-all</artifactId>
            <version>5.1.0</version>
        </dependency>
 
    </dependencies>

三、新建启动类

启动类上加上@EnableTurbine和@EnableHystrixDashboard两个注解

package tp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.netflix.turbine.EnableTurbine;

/**
 * @Package: tp
 * @ClassName: TurbineServerApplication
 * @Author: tanp
 * @Description: ${description}
 * @Date: 2020/7/29 17:47
 */
@SpringBootApplication
@EnableTurbine
@EnableHystrixDashboard
public class TurbineServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(TurbineServerApplication.class,args);
    }
}

四、新建application.yml文件

spring:
  application:
    name: turbin
server:
  port: 8682
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8689/eureka/

# 熔断器turbine
turbine:

  aggregator:
    cluster-config: default
  cluster-name-expression: new String("default")
  app-config: feign-server, feign-server-2

  #1.turbine.aggregator.clusterConfig :指定聚合哪些集群,多个使用”,”分割,默认为default。
  #2.turbine.appConfig :#配置Eureka中的serviceId列表,表明监控哪些服务
  #3.  turbine.clusterNameExpression :
  #  clusterNameExpression指定集群名称,默认表达式appName;此时:turbine.aggregator.clusterConfig需要配置想要监控的应用名称;
  #  当clusterNameExpression: default时,turbine.aggregator.clusterConfig可以不写,因为默认就是default;
  #  当clusterNameExpression: metadata[‘cluster’]时,假设想要监控的应用配置了eureka.instance.metadata-map.cluster: ABC,则需要配置,同时turbine.aggregator.clusterConfig: ABC

五、新建访问服务的工具类

新建一个工具类不停的访问feignserver服务

package tp;

import cn.hutool.core.thread.ThreadUtil;
import cn.hutool.http.HttpUtil;

/**
 * @Package: tp
 * @ClassName: Util
 * @Author: tanp
 * @Description: 工具类不断请求fegin server服务
 * @Date: 2020/7/30 9:08
 */
public class Util {

    public static void main(String[] args) {
        while(true) {
            ThreadUtil.sleep(1000);
            access(8683);
            access(8685);
        }
    }

    public static void access(int port) {
        try {
            String html= HttpUtil.get(String.format("http://127.0.0.1:%d/getdatas",port));
            System.out.printf("%d 地址的视图服务访问成功,返回大小是 %d%n" ,port, html.length());
        }
        catch(Exception e) {
            System.err.printf("%d 地址的视图服务无法访问%n",port);
        }
    }
}

六、新建feignserver2子模块

新建一个feignserver子模块,用作 turbine监控所需

spring cloud之Turbine断路器聚合监控(十二)

代码,pom文件,配置文件全部拷贝feignserver的,只需配置文件中的端口号为8683,服务名改为feign-server-2,用来作为断路器监控所监控的第二个服务

七、启动项目

启动 turbine服务,访问 页面 http://localhost:8682/hystrix,得到

spring cloud之Turbine断路器聚合监控(十二)

然后输入:http://localhost:8682/turbine.stream 

就可以得到监控列表了

spring cloud之Turbine断路器聚合监控(十二)

这时就会有人觉得奇怪,我不是监控了两个feignserver服务吗,为什么页面上只有一个展示,原因是监控不同的服务熔断,首先得是不同的rpc调用,也就是消费者的熔断函数要是两个不同的,或者,消费者去调用的是两个不同的服务提供者!这样才会有多个监控表。

八、新建dataserver3子模块

新建dataserver3子模块,代码,yml文件,pom文件全部拷贝dataserver的,只需修改yml文件中的端口号为8681,服务名为data-server-2,该服务用来作为feignserver2调用的服务端,以此满足新的消费目标

spring cloud之Turbine断路器聚合监控(十二)

九、修改feignserver2的代码

 

@Service
@FeignClient(value = "DATA-SERVER-2",fallback = ClientFeignHystrix.class)
public interface FeignClientServer {

    @GetMapping("/datas")
    public List<String> getDatas2();

}

FeignClientServer 中修改@FeignClient注解的values值为data-server-2,以此满足来调用的是两个不同的服务提供者

修改方法名为getDatas2()来满足消费者的熔断函数不同,所以对于调用的controller,ClientFeignHystrix里的方法也需更方法名为getDatas2()

spring cloud之Turbine断路器聚合监控(十二)

spring cloud之Turbine断路器聚合监控(十二)

十、访问页面结果

启动dataserver2服务,重启feignserver, turbineserver服务,再次访问页面http://localhost:8682/hystrix,输入http://localhost:8682/turbine.stream ,可得到

spring cloud之Turbine断路器聚合监控(十二)

可以看到,在监控面板已经有两个feignserserver服务和dataserver服务了,这样就可以实现断路器的聚合监控

十一、总结

从第一章博客学到现在,spring cloud的一些常用组件的基本使用已经了解的差不多了,下面粘贴本系列博客的源代码地址

https://download.csdn.net/download/bird_tp/12673045

本文地址:https://blog.csdn.net/bird_tp/article/details/107671174

相关标签: spring cloud