当前位置: 移动技术网 > IT编程>开发语言>Java > spring cloud之Turbine断路器聚合监控(十二)

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

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

一、博客背景

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

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

七、启动项目

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

然后输入:

就可以得到监控列表了

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

八、新建dataserver3子模块

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

九、修改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()

十、访问页面结果

启动dataserver2服务,重启feignserver, turbineserver服务,再次访问页面,输入,可得到

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

十一、总结

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

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

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

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网