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日

相关文章

  • java简单读取properties配置文件的方法示例

    下面是关于“java简单读取properties配置文件的方法示例”的完整攻略: 什么是properties文件 在Java开发中,properties文件是一种常用的配置文件,通常用于存储一些应用程序运行时需要用到的配置信息,比如数据库连接信息、日志输出等等。properties文件是以键值对的形式存储数据,其中键和值之间以等号“=”分隔,每一行表示一个键…

    other 2023年6月25日
    00
  • layui递归实现动态左侧菜单

    让我们来讲解如何使用 layui 递归实现动态左侧菜单。 什么是递归 在讲解 layui 递归实现动态左侧菜单之前,我们有必要先了解什么是递归。在计算机科学中,递归指的是一个函数可以调用自身的编程技巧,通常用来解决和数据结构有关的问题。递归函数通常具有以下特点: 至少有一个条件判断语句(递归的结束条件)。 调用自己函数本身。 步骤 接下来我们按照以下步骤来实…

    other 2023年6月27日
    00
  • 解决asp.net上传文件时文件太大导致的错误

    解决ASP.NET上传文件时文件太大导致的错误 在ASP.NET的应用程序中,当用户上传大文件时,有时会因为文件太大而导致错误。这种错误通常是由于ASP.NET应用程序默认上传文件大小限制导致的。如果您想上传大文件,您需要增大文件上传大小的限制。以下是解决ASP.NET上传文件时文件太大导致的错误的方法: 方法1:通过Web.Config配置文件增大上传文件…

    其他 2023年3月28日
    00
  • iOS9.2.1公测版/开发者测试版选哪个好?iOS9.2.1公测版和开发者测试版有什么区别?

    iOS9.2.1公测版/开发者测试版选哪个好? 苹果公司在推出新的iOS系统版本时,会提供给用户进行测试的公测版和开发者测试版。对于普通用户而言,选择哪个版本进行升级是需要认真考虑的,所以我们需要详细了解iOS9.2.1公测版和开发者测试版的区别,才能做出正确的决策。 iOS9.2.1公测版 iOS9.2.1公测版是苹果公司提供给广大用户的测试版,旨在让用户…

    other 2023年6月26日
    00
  • delphi的websocketserver控件实现(一、websocket原理)

    Delphi的WebSocketServer控件实现(一、WebSocket原理) WebSocket是一种在单个TCP连接上进行全双工通信的协议。它可以在客户端和服务器之间建立实时的向通信,而无需使用轮询或技术。本攻略将介绍WebSocket的原理,并讲解如何使用Delphi的WebSocketServer控件实现WebSocket服务器。 WebSock…

    other 2023年5月9日
    00
  • 创建dos命令窗口快捷方式的批处理

    创建 DOS 命令窗口快捷方式,可以更加高效地使用命令行进行文件操作等工作。以下是创建该快捷方式的完整攻略: 1. 创建批处理文件 首先,需要创建一个批处理文件,扩展名为 .bat。在该文件中,输入以下代码: @echo off start cmd 这段代码的作用是关闭命令行窗口上的回显,然后打开一个新的 DOS 命令窗口。 2. 保存批处理文件 将上述代码…

    other 2023年6月26日
    00
  • Android多语言适配的示例代码(兼容7.0+)

    下面我将详细讲解Android多语言适配的示例代码,包含以下几个方面: 如何配置多语言资源 如何在运行时设置当前语言 相关代码示例说明 如何配置多语言资源 首先,在res目录下新建values-xx文件夹,其中xx代表对应的语言代码,比如values-en代表英语资源,values-zh代表中文资源。 然后在对应的values-xx文件夹下创建strings…

    other 2023年6月27日
    00
  • jsr310-新日期apijsr310新日期api(完结篇)-生产实战

    当然,我可以为您提供有关“jsr310-新日期apijsr310新日期api(完结篇)-生产实战”的完整攻略,以下是详细说明: 什么是JSR310新日期API? JSR310新日期API是Java 8中引入的新日期和时间API,用于替代旧的java.util.Date和`java.util.Calendar类。JSR310新日期API提供了更加简、易用安全可…

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