温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

springCloud如何使用Hystrix实现容错

发布时间:2020-06-02 11:02:26 来源:亿速云 阅读:115 作者:Leah 栏目:编程语言

这篇文章的知识点包括:雪崩效应的介绍、Hystrix实现容错,阅读完整文相信大家对springCloud使用Hystrix实现容错的方法有了一定的认识。

一、雪崩效应

springCloud如何使用Hystrix实现容错

如上图可见,A服务作为基础服务,当他挂掉之后,导致级联故障,BCD都挂掉,导致雪崩效应。

二、如何容错

  • 方法一:设置超时

通常情况下一次远程连接就对应这一个线程或者进程,如果响应太慢,这个线程或者进程得不到释放,资源就会逐渐消耗导致服务不可用。此时设置超时,让资源尽快释放。

  • 方法二:使用断路器模式

在设置超时的情况下,如果对某个服务已经不可用时,所有新的请求都需要等待设置的超时时间,但此时这些等待时间已经毫无意义。

断路器应该事先快速失败,如果在一段时间检测到许多类似的错误,就会对该服务快速失败,停止请求已停掉的服务。断路器也应该可以自动诊断依赖的服务是否已经恢复正常。

断路器逻辑:

1、正常情况下,断路器关闭,可正常访问;

2、在一段时间内请求失败率达到阈值,断路器打开;

3、打开后进入“半开”状态。此时可允许一个请求访问依赖的服务,若成功则关闭断路器,若失败则继续保持打开状态。

三、使用Hystrix实现容错

Hystrix:是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败。

实现方式:

  • 包裹请求

  • 跳闸机制:当服务错误率达到一定阈值时,自动跳闸或者手动跳闸

  • 资源隔离:Hystrix为每个依赖都维护了一个小型的线程池,当线程池已满,会立即拒绝该依赖的请求,加速失败判定。

  • 监控

  • 回退机制:发生错误时,执行回退机制,类似缺省值;

  • 自我修复:断路器打开后的自动恢复机制

整合Hystrix

1、为movie添加依赖:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-hystrix</artifactId>
   <version>1.4.3.RELEASE</version>
</dependency>

2、在启动类上加上如下注解:

@EnableHystrix

3、修改controller:

@RequestMapping(value = "/movie/findById", method = RequestMethod.GET)
@HystrixCommand(fallbackMethod = "findByIdFallback")
public Map findById(Integer userId) {
    log.info("/movie/findById被访问,参数:userId=" + userId);
    //使用端口调用
    /*ResponseEntity<HashMap> forEntity =
            this.restTemplate.getForEntity(findByUserIdUrl + userId, HashMap.class);*/
    //使用Eureka+ribbon
    return this.restTemplate.getForObject("http://user/user/getUserInfo?userId=" + userId, HashMap.class);

}

public Map<String, String> findByIdFallback(Integer userId){
    Map<String, String> user = new HashMap<>(3);
    user.put("name","默认用户");
    user.put("id","-1");
    user.put("age","18");
    return user;
}

启动注册中心和【movie】服务,不启动【user】,访问   /movie/findById?userId=1

响应为缺省值。

看完这篇文章,你们学会springCloud使用Hystrix实现容错的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI