开启一个spring cloud 工程- 第七步 Hystrix 实现服务调用的数据监控

Hystrix 容错机制

在不改变各个微服务调用关系的前提下,针对错误情况进行预先处理。

设计原则
1、服务隔离机制(防止一个服务失败导致所有服务宕机)
2、服务降级机制(返回fallback方法给用户)
3、熔断机制(当服务消费者请求失败率达到某一个 特定数值时,会迅速启动熔断机制,并对错误进行修复)
4、提供实时的监控和报警功能
5、提供实时的配置修改功能

Hystrix 数据监控需要结合Spring Cloud Actuator来使用,Actuator提供了对服务的健康监控、数据统计、可以通过hystrix.steam 节点获取监控的请求数据,提供了 可视化的监控界面。

1、创建maven ,pom.xml 添加相关依赖。

org.springframework.cloud spring-cloud-starter-netflix-eureka-client 2.0.2.RELEASE org.springframework.cloud spring-cloud-starter-openfeign 2.0.2.RELEASE org.springframework.boot spring-boot-starter-actuator 2.0.2.RELEASE org.springframework.cloud spring-cloud-starter-netflix-hystrix 2.0.2.RELEASE org.springframework.cloud spring-cloud-starter-netflix-hystrix-dashboard 2.0.2.RELEASE

2、创建配置文件application.yml

server:
  port: 8060
spring:
  application:
    name: hystrix
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
  instance:
    prefer-ip-address: true
feign:
  hystrix:
    enabled: true
management:
  endpoints:
    web:
      exposure:
        include: 'hystrix.stream'

3、创建启动类

package com.southwind;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;
import org.springframework.cloud.openfeign.EnableFeignClients;

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

注释说明:
@EnableCircuitBreaker:声明启用数据监控
@EnableHystrixDashboard:声明启用可视化数据监控

4、添加controller 方法

因为要继续使用feign 声明式接口调用,所以直接把上一篇文章的feign 的接口复制过来
在这里插入图片描述

FeignProviderClient 代码如下:

package com.southwind.feign;

import com.southwind.entity.Student;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;

import java.util.Collection;

//这里就体现了Feign 的声明式调用,都是接口,
//value = provider是因为提供者在注册中心的名字叫做 provider
@FeignClient(value = "provider")
public interface FeignProviderClient {
    
    
   /* 需要调用提供者的controller 里面的方法,直接就行(有
    * 点相当于它自己就会把provider 替换成IP地址,然后把Mapping 里面的值给拼接
    * 到后面,实现模块间的调用。)
    */
    @GetMapping("/student/findAll")
    public Collection<Student> findAll();
    @GetMapping("/student/index")
    public String index();
}

Student 代码如下:

package com.southwind.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@NoArgsConstructor                 //无参构造
@AllArgsConstructor                //有参构造
public class Student {
    
    
    private long id;
    private String name;
    private int age;

}

HystrixHandler 代码如下:

package com.southwind.controller;

import com.southwind.entity.Student;
import com.southwind.feign.FeignProviderClient;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Collection;

@RestController
@RequestMapping("/hystrix")
public class HystrixHandler {
    
    
    @Autowired
    private FeignProviderClient feignProviderClient;

    @GetMapping("/findAll")
    public Collection<Student> findAll(){
    
    
        return feignProviderClient.findAll();
    }

    @GetMapping("/index")
    public String index(){
    
    
        return feignProviderClient.index();
    }
}

4、开始测试,启动注册中心,启动服务提供者,启动hystrix 工程
浏览器输入:http://localhost:8060/actuator/hystrix.stream

在这里插入图片描述
这里的 ping 就是在实时刷新,空是因为没有服务调用

现在开始使用 hystrix 访问服务提供者
浏览器输入:localhost:8060/hystrix/index

在这里插入图片描述

在这里插入图片描述
访问成功,ping 就有数据显示了。

这个显示不直观,现在访问可视化的地址,能更直观显示服务被调用情况

浏览器输入:http://localhost:8060/hystrix

在这里插入图片描述
出现这个界面,标号1的位置,输入需要监控的 访问地址,标号2 是给该访问地址命个名字 ,然后点击标号 3

在这里插入图片描述
出现以下界面:
在这里插入图片描述

再次调用index 和findAll 接口
在这里插入图片描述
可以看到,调用那个接口,哪个接口的信息 就会有变化,已经实现Hystrix 实现数据监控

猜你喜欢

转载自blog.csdn.net/chenmaolin928/article/details/109249173