微服务spring cloud—Hystrix简介和通过方式整合H

Hystrix简介

Hystrix是由Netflix开源的延迟和容错库,用于隔离访问远程系统、服务或者第三方库,防止级联失败,从而提升系统的可用性与容错性。Hystrix主要通过以下几点实现延迟和容错。

包裹请求:使用HystrixCommand(或HystrixObservableCommand)包裹对以来
的调用逻辑,每个命令在独立线程中执行。这是用到了设计模式中的“命令模式”。

跳闸机制:当某服务的错误率超过一定阈值,Hystrix可以自动或者手动跳闸,
停止请求该服务一段时间。

资源隔离:Hystrix为每个依赖都维护一个小型的线程池(或者信号量)。如果
该线程池已满,发往该依赖的请求就被立即拒绝,而不是排队等待,从而加速
失败判定。

监控:Hystrix可以近乎实时地监控运行指标和配置的变化,例如成功、失败、
超时、以及被拒绝的请求等。

回退机制:当请求失败、超时、被拒绝,或当断路器打开时,执行回退逻辑。
	回退逻辑可由开发人员自行提供,例如返回一个缺省值。

自我修复:断路器打开一段时间后,会自动进入“半开”状态。断路器打开、关闭、
半开的逻辑转换。

通用方式整合Hystrix

1.复制项目microservice-consumer-movie-ribbon,将ArtifactId修改为microservice-consumer-movie-ribbon-hystrix。

2.为项目添加hystrix依赖。

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

3.在启动类上添加注解@EnableCircuitBreaker或@EnableHystrix,从而为项目启用断路器支持。

4.修改MovieController,让其中的findById方法具备容错能力

@RestController
public class MovieController {
    private static final Logger LOGGER = LoggerFactory.getLogger(MovieController.class);
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private LoadBalancerClient loadBalancerClient;

    @HystrixCommand(fallbackMethod = "findByIdFallback")

    @GetMapping("/user/{id}")
    public User findById(@PathVariable Long id){
        return this.restTemplate.getForObject("http://users/" + id, User.class);
    }

    public User findByIdFallback(Long id) {
        User user = new User();
        user.setId(-1L);
        user.setName("默认用户");
        return user;
    }

}

有代码可知,为findById方法编写一个回退方法findByIdFallback,该方法与findById方法具有相同的参数与返回值类型,该方法返回一个默认的User。
在findById方法上,使用注解@HystrixCommand的fallbackMethod属性,指定回退方法是fallByIdFallback。

5.测试

1.启动项目microservice-discovery-eureka。
2.启动项目microservice-provider-user。
3.启动项目microservice-consumer-movie-ribbon-hystrix。
4.访问http://localhost:8010/user/1,获得如下结果
在这里插入图片描述
5.停止microservice-provider-user。
6.再次访问http://localhost:8010/user/1,获得如下结果。
在这里插入图片描述

说明当用户微服务不可用时,进入了回退方法。

本文大部分内容转载自周立的《Spring Cloud与Docker微服务架构实战》

猜你喜欢

转载自blog.csdn.net/weixin_43439494/article/details/83655472