0
点赞
收藏
分享

微信扫一扫

Day17_19_SpringCloud教程之Hystrix Turbine聚合面板

yeamy 2022-12-23 阅读 122


19_SpringCloud教程之Hystrix Turbine聚合面板

一. Hystrix Turbine简介

我们上一篇博客讲解了Hystrix Dashboard的功能及其实现,了解到可以给每个服务添加一个后台监控界面.

但是对我们来说,查看单个的Hystrix Dashboard数据并没有多大的价值,要想看整个系统的Hystrix Dashboard数据,我们可以使用Hystrix Turbine组件.Hystrix Turbine将每个服务的Hystrix Dashboard数据进行了整合.Hystrix Turbine的使用非常简单,只需要引入相应的依赖和加上注解和配置就可以了.

二. Hystrix Turbine的实现

我们在上一篇博客代码的基础之上进行改造.

因为我们需要多个服务的Dashboard数据,所以需要再创建一个服务,取名为eureka-ribbon2,它的基本配置等同于eureka-ribbon,但是该服务中的Controller不同.

1. eureka-ribbon2代码改造

我们创建一个新的模块,绝大多数代码复制eureka-ribbon模块中的代码实现即可,但是对Controller代码单独修改一下.

修改了Controller及其接口方法的名称.

package com.syc.cloud.web;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.syc.cloud.service.RibbonService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class SayHelloController {

@Autowired
private RibbonService helloService;

//给需要降级的方法加上注解@HystrixCommand
@HystrixCommand(fallbackMethod = "handleError")
@RequestMapping(value = "/sayHello")
public String sayHello(@RequestParam String name) {

return helloService.helloService(name);
}

/*熔断处理*/
public String handleError(String name) {
return "Hello," + name + ". Sorry,please check your network!";
}

}

其他基本一样.

2. 创建service-turbine

2.1 添加依赖

<?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">

<parent>
<artifactId>ribbon02</artifactId>
<groupId>com.syc.cloud</groupId>
<version>1.0-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>service_turbine</artifactId>

<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

<!--客户端负载均衡组件-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-ribbon</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.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--熔断监控面板功能必要依赖包-->

<!--聚合面板依赖包-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-turbine</artifactId>
</dependency>
</dependencies>

</project>

2.2 入口类添加@EnableTurbine注解

在其入口类ServiceTurbineApplication加上注解@EnableTurbine,开启turbine聚合功能. @EnableTurbine注解包含了@EnableDiscoveryClient注解,即开启了注册服务.

package com.syc.cloud;

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;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@EnableEurekaClient
@EnableDiscoveryClient //注意:必须是@EnableDiscoveryClient注解,不能是@EnableEurekaClient,否则无法实现负载均衡.
@RestController
@EnableHystrix
@EnableHystrixDashboard
@EnableCircuitBreaker //开启服务熔断功能
@EnableTurbine //开启聚合面板功能
public class ServiceTurbineApplication {

public static void main(String[] args) {
SpringApplication.run(ServiceTurbineApplication.class, args);
}

}

2.3 修改配置文件application.yml

server:
port: 8767

spring:
application:
name: service-turbine

eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/

management:
endpoints:
web:
exposure:
include: "*"
cors:
allowed-origins: "*"
allowed-methods: "*"

turbine:
app-config: eureka-ribbon,eureka-ribbon2
aggregator:
clusterConfig: default
clusterNameExpression: new String("default")
combine-host: true
instanceUrlSuffix:
default: actuator/hystrix.stream

3. 项目结构


Day17_19_SpringCloud教程之Hystrix Turbine聚合面板_.net

三. Turbine功能演示

依次开启项目目录结构截图中的工程.


Day17_19_SpringCloud教程之Hystrix Turbine聚合面板_maven_02

1. 查看turbine.stream

打开浏览器输入 ​​http://localhost:8767/turbine.stream,界面如下​​:


Day17_19_SpringCloud教程之Hystrix Turbine聚合面板_.net_03

2. 请求一下接口

​​http://localhost:8764/hello?name=一一哥​


Day17_19_SpringCloud教程之Hystrix Turbine聚合面板_spring_04

​​http://localhost:8766/sayHello?name=一一哥​


Day17_19_SpringCloud教程之Hystrix Turbine聚合面板_spring_05

3. 查看聚合面板

打开:​​http://localhost:8767/hystrix,输入监控流http://localhost:8767/turbine.stream​


Day17_19_SpringCloud教程之Hystrix Turbine聚合面板_maven_06

可以看到我们已经实现了面板聚合,把原先每个服务中单独的熔断监控界面整合到了一起.


Day17_19_SpringCloud教程之Hystrix Turbine聚合面板_maven_07

四. 解决Unable to connect to Command Metric Stream问题(附加)

如果出现下图所示异常现象:

Day17_19_SpringCloud教程之Hystrix Turbine聚合面板_spring_08

 

首先确保eureka,hystrix,hystrix-dashboard,actuator等相关依赖包一个都不少,另外所有该开启的注解功能都enable了.

如果以上都做到了还是有这个异常现象.

则在出现异常的服务中的入口类内部添加如下代码:

//解决Unable to connect to Command Metric Stream问题.
@Bean
public ServletRegistrationBean getServlet(){
HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet);
registrationBean.setLoadOnStartup(1);
registrationBean.addUrlMappings("/actuator/hystrix.stream");
registrationBean.setName("HystrixMetricsStreamServlet");
return registrationBean;
}

此时重启项目,再去查看Hystrix Dashboard监控面板,会发现问题得以解决. 

Day17_19_SpringCloud教程之Hystrix Turbine聚合面板_spring_09

举报

相关推荐

0 条评论