首页 > 其他分享 >Hystrix应用:如何在Spring Boot中使用Hystrix?

Hystrix应用:如何在Spring Boot中使用Hystrix?

时间:2024-04-13 23:11:06浏览次数:33  
标签:服务 String Hystrix Spring Boot 断路器 大佬 public

引言

在微服务架构的发展过程中,面对复杂的服务依赖和不可预见的系统故障,如何提升系统的容错能力成为了一个非常急迫且重要的能力。

Netflix(网飞)公司开发的 Hystrix 库,作为一个服务熔断和隔离框架,能有效地帮助开发者控制服务间的交互,防止系统间的级联故障。

本文将带你详细了解 Hystrix 的基本概念和作用,并介绍如何在 Spring Boot 应用中实现和使用 Hystrix 的五种常用的使用方法。

正文

Hystrix是什么?

Hystrix是一个用于处理分布式系统中的延迟和容错的开源库。

主要通过“断路器”模式提供服务的容错保护,防止服务间故障的蔓延。

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。 这是大佬写的, 7701页的BAT大佬写的刷题笔记,让我offer拿到手软

Hystrix的作用

Hystrix的核心功能包括:

  • 服务隔离机制:通过线程池或信号量隔离技术,限制请求的数量,防止服务之间的相互影响。
  • 断路器机制:当服务的调用问题超过一定阈值时,自动开启断路器,快速失败,避免进一步的系统损耗。
  • 资源保护:限制服务访问的并发量,确保系统资源不被耗尽。
  • 服务降级:当服务出现问题时,可以自动进行服务降级处理,确保系统提供的基本功能。

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。 这是大佬写的, 7701页的BAT大佬写的刷题笔记,让我offer拿到手软

Spring Boot中使用Hystrix的五种方法

1、基本的服务熔断

在Spring Boot应用中,首先需要添加Hystrix的依赖,然后通过简单的注解来启用Hystrix和服务熔断功能。

依赖配置:

<!-- 在pom.xml中添加Hystrix依赖 --> 
<dependency> 
  <groupId>org.springframework.cloud</groupId> 
  <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> 
</dependency>

启用Hystrix:

在Application启动类上使用@EnableHystrix注解启用Hystrix功能。


@SpringBootApplication
@EnableHystrix
public class Application { 
  public static void main(String[] args) { 
    SpringApplication.run(Application.class, args); 
  } 
}

创建熔断方法:

使用@HystrixCommand注解定义服务调用的熔断策略。


@Service
public class UserService {

    @HystrixCommand(fallbackMethod = "defaultUser")
    public String getUser(String username) {
        // 模拟获取用户信息,此处可能会调用失败
        throw new RuntimeException("User service failed");
    }

    public String defaultUser(String username) {
        // 当获取用户信息失败时,提供默认用户信息
        return "Default User";
    }
}

2、设置断路器的参数

通过配置Hystrix的参数,可以详细控制断路器的行为,如超时时间、请求阈值等。

@HystrixCommand(fallbackMethod = "defaultUser",
                commandProperties = {
                    @HystrixProperty(name = "execution.isolation.thread.timeoutInMilliseconds", value = "1500"),
                    @HystrixProperty(name = "circuitBreaker.requestVolumeThreshold", value = "10"),
                    @HystrixProperty(name = "circuitBreaker.errorThresholdPercentage", value = "50"),
                    @HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds", value = "5000")
                })
public String getUser(String username) {
    // 模拟获取用户信息的方法,这里设置了具体的断路器参数
    throw new RuntimeException("User service failed");
}

3、服务降级处理

在服务不可用时,Hystrix可以自动执行降级方法,返回一个预定义的默认响应。

@HystrixCommand(fallbackMethod = "defaultUser")
public String getUser(String username) {
    // 模拟用户信息获取
    throw new RuntimeException("User service failed");
}

public String defaultUser(String username) {
    // 返回默认用户
    return "Default User";
}

4、请求缓存

Hystrix支持请求级别的缓存,可以减少对同一请求的多次处理,提高效率。

@CacheResult
@HystrixCommand
public User getUserById(String id) {
    return userRepository.findById(id).orElse(null);
}

5、请求合并

通过请求合并,可以将短时间内多个相似的请求合并成一个请求向服务器发送,减少通信成本。

@HystrixCollapser(batchMethod = "getUsers", collapserProperties = {
        @HystrixProperty(name = "timerDelayInMilliseconds", value = "100"),
        @HystrixProperty(name = "maxRequestsInBatch", value = "10")
})
public Future<User> getUserById(String id) {
    // 这里实际不需要实现,Hystrix会自动进行方法合并
    return null;
}

@HystrixCommand
public List<User> getUsers(List<String> ids) {
    return userRepository.findAllById(ids);
}

本文总结

通过以上介绍,我们不难看出,Hystrix提供了强大而灵活的方法来增强微服务的容错性。

在Spring Boot框架中结合使用Hystrix,能有效地帮助开发者控制服务间的故障影响,保证整个系统的高可用性和稳定性。

Hystrix不仅提供了断路器和服务隔离的功能,还包括了服务降级处理、请求缓存和合并等高级功能,使得服务更加健壮。

最后说一句(求关注,求赞,别白嫖我)

最近无意间获得一份阿里大佬写的刷题笔记,一下子打通了我的任督二脉,进大厂原来没那么难。 这是大佬写的, 7701页的BAT大佬写的刷题笔记,让我offer拿到手软

本文,已收录于,我的技术网站 cxykk.com:程序员编程资料站,有大厂完整面经,工作技术,架构师成长之路,等经验分享

求一键三连:点赞、分享、收藏

点赞对我真的非常重要!在线求赞,加个关注我会非常感激!

标签:服务,String,Hystrix,Spring,Boot,断路器,大佬,public
From: https://www.cnblogs.com/jiang-xiao-bei/p/18133562

相关文章

  • Spring学习笔记
    一、Spring启示录阅读以下代码:packagecom.powernode.oa.controller;importcom.powernode.oa.service.UserService;importcom.powernode.oa.service.impl.UserServiceImpl;publicclassUserController{privateUserServiceuserService=newUserServiceImpl();......
  • Springboot集成WebSocket实现智能聊天【Demo】
    背景openai目前越来越流行,其他ai产业也随之而来,偶然翻到openai接口文档,就想着可以调用接口实现智能聊天,接下来就写写我怎么接入websocket的过程,文笔不佳,谅解。接入WebSocket1.webSocket依赖<dependency><groupId>org.springframework.boot</groupId><artifactId......
  • SpringBoot项目中对定义的多个Aspect类排序
    代码示例@ConfigurationpublicclassAspectConfig{@Aspect@Component@Order(Ordered.HIGHEST_PRECEDENCE)publicstaticclassLogAspect{@Pointcut("execution(public*com.imooc.spring.web..*.*(..))")publicvoidwe......
  • SpringBoot中的Jetty使用及分析
    前言和Tomcat类似,Jetty也是一个Web应用服务器,相对于Tomcat,Jetty更加轻量、更加简易、更加灵活。今天通过代码来简单分析下SpringBoot中是如何启动Jetty的。Jetty简介使用importjava.io.File;importjava.io.IOException;importjava.net.InetAddress;import......
  • SpringBoot使用 nacos 会默认加载项目名配置文件
    问题描述boostrap.yml配置如下spring:application:name:cnblogscloud:nacos:config:server-addr:http://ip:8848namespace:d8b0df04-aa58-4a5b-b582-7d133b9e8b2c#命名空间IDfile-extension:yamlusern......
  • springboot集成redis
    首先引入依赖<!--redis坐标--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency>在yml中引入redis数据库spring......
  • 配置中心Spring cloud config、Apollo、Nacos对比
    配置中心springcloudconfigApolloNacos(重点)动态配置管理SpringCloudBus自动刷新支持支持服务发现与服务健康检查Eureka或Consul实现不支持支持配置格式Properties、yaml只支持xml、text、Properties支持yaml、text......
  • Springboot2+vue2整合项目
    前端https://blog.csdn.net/m0_37613503/article/details/128961447数据库1.用户表CREATETABLE`x_user`(`id`int(11)NOTNULLAUTO_INCREMENT,`username`varchar(50)NOTNULL,`password`varchar(100)DEFAULTNULL,`email`varchar(50)DEFAULTNULL,`......
  • 28.shiro的总结(同springsecurity对比)
    来看具体例子中shiro的应用:首先三个核心组件Subject当前和软件交互的任何事件SecurityManager管理所有Subject,SecurityManager是Shiro架构的核心,配合内部安全组件共同组成安全伞Realms:用于进行权限信息的验证,我们自己实现。Realm本质上是一个特定的安全DAO:它封......
  • 电脑开机时报错No Bootable Device找不到索引的解决方法
      本文介绍笔记本电脑出现NoBootableDevice错误提示,且无法开机的多种解决办法。1问题产生  最近,笔记本电脑正在正常使用时,突然蓝屏,出现你的设备遇到问题,需要重启。的提示;最下方的终止代码具体是CRITICAL_PROCESS_DIED还是SYSTEM_SERVICE_EXCEPTION有点记不太清楚了,不过这......