SpringCloud中的断路器(Hystrix)和断路器监控(Dashboard)

概述

断路器是一种处理分布式系统故障的重要工具,可以增强系统的容错能力。在SpringCloud中,Hystrix是一种非常流行的断路器实现。同时,Hystrix Dashboard也提供了对Hystrix断路器进行监控的工具。

Hystrix断路器

什么是Hystrix断路器?

Hystrix是Netflix开源的一款用于处理分布式系统的失败,实现断路器的工具。在分布式系统中,许多服务相互依赖,因此一个服务的问题可能会引起联级故障,影响整个系统的可用性。Hystrix通过隔离服务之间的依赖关系、降级机制、熔断机制和实时监控来增强服务的稳定性和容错能力。

Hystrix断路器的使用

在SpringCloud应用中使用Hystrix断路器非常简单,只需要在依赖的服务上添加@EnableHystrix注解,并在需要熔断的方法上添加@HystrixCommand注解即可。

@Service
public class UserService {

    @HystrixCommand(fallbackMethod = "findByIdFallback")
    public User findById(Long id) {
        // 查询用户信息
    }

    public User findByIdFallback(Long id) {
        return new User(id, "Default User");
    }
}

在上例中,findByid方法是需要进行熔断保护的方法,在方法上添加了@HystrixCommand注解,并指定了对应的降级方法findByIdFallback。当findById的访问失败时,就会调用findByIdFallback方法返回自定义的默认值。

Hystrix断路器的配置

对于Hystrix断路器的配置,可以在application.yml中进行配置,如下所示:

hystrix:
  command:
    default:
      execution.isolation.thread.timeoutInMilliseconds: 5000 # 超时时间
      execution.isolation.strategy: SEMAPHORE # 线程隔离策略,默认为THREAD
      circuitBreaker.requestVolumeThreshold: 20 # 请求总数阈值
      circuitBreaker.errorThresholdPercentage: 50 # 错误百分比阈值
      circuitBreaker.sleepWindowInMilliseconds: 5000 # 短路器休眠时间

Hystrix Dashboard

什么是Hystrix Dashboard?

Hystrix Dashboard是一个监控Hystrix断路器的可视化工具,可以实时监控断路器的请求和熔断的情况,为开发者提供有价值的运维数据。Hystrix Dashboard的基本原理是根据Hystrix Stream中的数据进行可视化展示。

Hystrix Dashboard的使用

在SpringCloud应用中使用Hystrix Dashboard也非常简单,只需要在依赖的服务上添加@EnableHystrixDashboard注解并在应用启动后访问http://<ip>:<port>/hystrix即可进入Hystrix Dashboard首页。

@SpringBootApplication
@EnableHystrixDashboard
public class HystrixDashboardApplication {

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

在Dashboard首页输入需要监控的服务地址(通常是Hystrix Stream的地址),如http://localhost:8080/actuator/hystrix.stream,然后点击“Monitor Stream”按钮,就可以开启监控了。

示例说明

下面通过一个简单的示例来说明Hystrix断路器和Dashboard的使用。

假设有两个服务,一个用户服务和一个订单服务。订单服务需要调用用户服务获取用户信息。为了增强服务的稳定性和容错能力,需要对订单服务的调用进行熔断保护。代码实现如下:

@RestController
public class OrderController {

    @Autowired
    private UserService userService;

    @GetMapping("/order/{id}")
    @HystrixCommand(fallbackMethod = "findByIdFallback")
    public User findById(@PathVariable Long id) {
        return userService.findById(id);
    }

    public User findByIdFallback(Long id) {
        return new User(id, "Default User");
    }
}

@Service
public class UserService {

    public User findById(Long id) {
        // 查询用户信息
    }
}

这里通过在findById方法上添加了@HystrixCommand注解,并指定了与之对应的降级方法findByIdFallback。当findById的访问失败时,就会调用findByIdFallback方法返回自定义的默认值。

然后在订单服务中添加一个Hystrix Stream的endpoint:

@SpringBootApplication
@EnableHystrixDashboard
@EnableCircuitBreaker
public class OrderServiceApplication {

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

    @Bean
    public ServletRegistrationBean<HystrixMetricsStreamServlet> getServlet() {
        HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet();
        ServletRegistrationBean<HystrixMetricsStreamServlet> registrationBean = new ServletRegistrationBean<>(streamServlet);
        registrationBean.setLoadOnStartup(1);
        registrationBean.addUrlMappings("/actuator/hystrix.stream");
        registrationBean.setName("HystrixMetricsStreamServlet");
        return registrationBean;
    }
}

并在UserService中添加一个手动抛出异常的接口:

@RestController
public class UserController {

    @GetMapping("/user")
    public User findById(Long id) {
        throw new RuntimeException("用户查询失败");
    }
}

启动应用后,访问http://localhost:8080/order/1可以正常返回用户信息。再访问http://localhost:8080/order/0会触发熔断保护,返回自定义的默认值。最后访问http://localhost:8080/actuator/hystrix.stream可以看到断路器的监控信息。

在此基础上,我们可以添加Hystrix Dashboard的依赖,修改代码并启动Dashboard,来实现断路器的可视化监控。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:SpringCloud中的断路器(Hystrix)和断路器监控(Dashboard) - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • C语言中字符串的内存地址操作的相关函数简介

    下面我将详细讲解C语言中字符串的内存地址操作的相关函数。 相关函数简介 C语言中,对字符串的操作常常离不开对字符串内存地址的操作,常用的有以下几个函数: 1. 字符串长度函数 strlen 函数原型:size_t strlen(const char *s) 功能:计算字符串的长度,不包括末尾的’\0’。 示例: char str[] = "Hell…

    other 2023年6月20日
    00
  • Vue组件二次封装的一些实用技巧总结

    下面是详细的“Vue组件二次封装的一些实用技巧总结”的攻略: 什么是Vue组件二次封装 Vue组件二次封装,指的是在已有组件的基础上,再进行一层封装,以满足更多的业务需求。具体来说,二次封装可以包括以下方面: 重写组件的props属性,添加或修改某些属性; 重新定义组件内部的数据或方法; 使用Vue插槽(slot)机制,自定义组件的具体渲染方式; 添加钩子函…

    other 2023年6月25日
    00
  • MYSQL主从不同步延迟原理分析及解决方案

    MYSQL主从不同步延迟问题是很常见的,下面将会从原理、分析以及解决方案等方面作详细介绍。 问题原理 当我们使用MYSQL主从复制时,主库(MySQL)在接收到新数据时,将新数据写入二进制日志(binary log),从库(MySQL)连接到主库(MySQL)并获取binary log中的数据,实现数据同步。如果从库(MySQL)无法及时获取到binary …

    other 2023年6月26日
    00
  • vue父组件异步传递props值,子组件接收不到解决方案

    对于”vue父组件异步传递props值,子组件接收不到”这种情况,解决方案主要有以下两种: 方法一:在子组件中使用$nextTick 如果父组件异步修改了props值导致子组件接收不到,可以在子组件中使用Vue的nextTick函数: // 父组件 <template> <child :propA="data"> …

    other 2023年6月26日
    00
  • 合金装备5幻痛双足兵器开发位置及获得方法

    合金装备5幻痛双足兵器开发位置及获得方法攻略 在《合金装备5幻痛》中,双足兵器是一种强大的装备,可以提供额外的火力和机动性。本攻略将详细介绍双足兵器的开发位置和获得方法。 开发位置 双足兵器的开发位置分布在游戏的不同地点,以下是两个示例: 示例1:Nova Braga Airport Nova Braga Airport是一个位于非洲的地点,你可以在这里找到…

    other 2023年7月27日
    00
  • Dreamweaver站点中新建文件夹和修改/删除/移动文件的操作方法

    下面是详细讲解Dreamweaver站点中新建文件夹和修改、删除、移动文件的操作方法。 新建文件夹 打开Dreamweaver软件,打开你创建的站点,确保“文件”窗口处于打开状态。 在“文件”窗口中找到你要新建文件夹的目录,右键单击并选择“新建文件夹”选项。 在弹出的对话框中输入文件夹名称,并选择你的文件夹创建位置,然后单击“新建”按钮即可。 示例:假设我们…

    other 2023年6月27日
    00
  • 【X86】—X86处理器大小端的数据存储验证

    X86处理器是一种常见的CPU架构,它支持两种不同的数据存储方式:大端模式和小端模式。本文将介绍如何验证X86处理器的数据存储方式,包括大端模式和小端模式的概念、验证方法和示例说明。 1. 大端模式和小端模式 在计算机中,数据存储方式可以分为两种:大端模式和小端模式。大端模式是指高位字节存储在低地址,低位字节存储在高地址;小端模式是指低位字节存储在低地址,高…

    other 2023年5月5日
    00
  • 右键发送(sendto),创建快捷方式到自定义的位置

    以下是详细的攻略: 安装SendTo Toys工具 首先,我们需要安装一个名为”SendTo Toys”的免费工具,它可以帮助我们创建自定义的”Send to”菜单项。 浏览器中打开http://gabrieleponti.com/software/send-to-toys,下载并安装SendTo Toys工具。 安装完成后,在”开始菜单”中打开”SendT…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部