我是靠谱客的博主 花痴酒窝,最近开发中收集的这篇文章主要介绍Hystrix的简单介绍与使用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Hystrix 是 Netflix 针对微服务分布式系统采用的熔断保护中间件,相当于电路中的保险丝。

在分布式环境中,许多服务依赖项中的一些必然会失败。Hystrix 是一个库,通过添加延迟容忍和容错逻辑,帮助你控制这些分布式服务之间的交互。Hystrix 通过隔离服务之间的访问点、停止级联失败和提供回退选项来实现这一点,所有这些都可以提高系统的整体弹性。

在微服务架构下,很多服务都相互依赖,如果不能对依赖的服务进行隔离,那么服务本身也有可能发生故障,Hystrix 通过 HystrixCommand 对调用进行隔离,这样可以阻止故障的连锁效应,能够让接口调用快速失败并迅速恢复正常,或者回退并优雅降级。

Hystrix 的简单使用

首先创建一个Spring Boot 模块,然后添加如下依赖:

创建成功后,添加如下配置,将Hystrix 注册到 Eureka 上:

spring.application.name=hystrix
server.port=3000
eureka.client.service-url.defaultZone=http://localhost:1111/eureka

然后在项目启动类上添加如下注解,开启断路器,同时提供一个RestTemplate :

//@SpringBootApplication
//@EnableCircuitBreaker
@SpringCloudApplication //【组合注解】@SpringCloudApplication = @SpringBootApplication + @EnableCircuitBreaker
public class HystrixApplication {
 
    public static void main(String[] args) {
        SpringApplication.run(HystrixApplication.class, args);
    }
 
    @Bean
    @LoadBalanced
    RestTemplate restTemplate(){
        return new RestTemplate();
    }
 
}

接下来提供Hystrix 接口:

@Service
public class HelloService {
 
    @Autowired
    RestTemplate restTemplate;
 
    /**
     * 在这个方法中,将发起一个远程调用,去调用provider中提供的 /hello接口
     * 但是调用这个方法可能会失败,
     *
     * 所以在方法上面添加 @HystrixCommand ,配置fallbackMethod 属性,这个属性表示该方法调用失败时的临时替代方法
     * 【专业术语:服务降级】 */
    @HystrixCommand(fallbackMethod = "error")//如果希望直接抛出异常,不做服务降级 。则再加上ignoreExceptions配置(fallbackMethod = "error",ignoreExceptions = ArithmeticException.class)
    public String hello(){
        return restTemplate.getForObject("http://provider/hello",String.class);
    }
 
   /**
     * 这个方法名要和 fallbackMethod一致
     * 方法返回值也要一致 【比如这里都是String类型,error也要一致】
     * 此处 调用 备案方案 ,比如数据库崩了,就要去查缓存
     *
     * **下面也可以继续写HystrixCommand调用error2 ,然后error2再去调用其它的方法,方法一样,依次往下,这就是【服务降级】
     * **越往下,数据的获取能力越来越容易,准确性可能降低,但不会让系统挂掉。
     * **这就是Hystrix 的作用: 1. 降级  2. 容错。  避免雪崩  。
     *
     * @return
     */
    //@HystrixCommand(fallbackMethod = "error2")
    public String error(){
        return "error";
    }
 
}
@RestController
public class HelloController {
    @Autowired
    HelloService helloService;
    
    @GetMapping("/hello")
    public String hello(){
        return helloService.hello();
    }
 
}

启动Eureka 服务,启动两个provider实例(打两个包),启动一个consumer,访问consumer 去调用两个provider接口(负载均衡方式),访问成功之后然后突然关闭一个provider服务,再去刷新请求consumer,会有短时间的报错。(原因是一个provider掉线,它自己要把掉线的消息告诉Eureka,Eureka再把provider掉线的消息告诉consumer,在这个过程中肯定是有延迟的,在consumer没收到provider掉线的消息之前就有可能会去访问已经掉线的provider,这时就会有异常抛出。Hystrix在这里其实就是解决很短时间内的问题,consumer访问掉线的provider时不让弹出错误页面就行)

最后

以上就是花痴酒窝为你收集整理的Hystrix的简单介绍与使用的全部内容,希望文章能够帮你解决Hystrix的简单介绍与使用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(77)

评论列表共有 0 条评论

立即
投稿
返回
顶部