美文网首页
SpringCloud那些事-Hystix

SpringCloud那些事-Hystix

作者: Dane_404 | 来源:发表于2019-12-02 23:02 被阅读0次

在微服务架构中存在多个直接调用的服务,这些服务若在调用时出现故障会导致连锁效应,可能会让整个系统变得不可用,这种情况叫做雪崩,Hystix 为了解决这个问题。

Hystix 使用自己的线程池,这样和主应用服务器线程池隔离,如果调用花费很长时间,会停止调用,不同的命令或命令组能够配置它们各自的线程池,可以隔离不同的服务。

Hystix 使用

引入依赖:

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

开启 Hystix ,启动类上加 @EnableCircuitBreaker

@EnableDiscoveryClient
@EnableCircuitBreaker
@SpringBootApplication
public class ConsumeApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumeApplication.class, args);
    }

}

或者可以使用 @SpringCloudApplication

@SpringCloudApplication
public class ConsumeApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConsumeApplication.class, args);
    }

}

//SpringCloudApplication 包含了它们3
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
public @interface SpringCloudApplication {
}

然后在消费者 consume 使用 @HystrixCommand

@RestController
public class ConsumeController {

    @Autowired
    private RestTemplate restTemplate;
    
    @GetMapping("/callhello")
    @HystrixCommand(fallbackMethod = "callHelloFailback")
    public String callHello(){
        String url = "http://user-service/user/hello";
       return restTemplate.getForObject(url,String.class);
    }

    public String callHelloFailback(){
        return "服务器繁忙";
    }
}

然后模拟服务提供端超时等情况,这里直接在 user-service 睡眠一会

@RequestMapping("/user")
public class UserController {

    @GetMapping("/hello")
    public String hello() throws InterruptedException {

        Thread.sleep(2000);

        return "hello";
    }
}

注意的是,Hystrix 超时时间默认是1000ms,如果 Ribbon 设置的超时时间小于或等于 Hystix的超时时间,那么重试机制将不会没有被触发,而是直接出发 Hystix。

Hystix 超时时间可以配置:

# 设置hystrix的超时时间为6000ms
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=6000

相关文章

  • SpringCloud那些事-Hystix

    在微服务架构中存在多个直接调用的服务,这些服务若在调用时出现故障会导致连锁效应,可能会让整个系统变得不可用,这种情...

  • SpringCloud微服务之熔断器Hystix

    复杂分布式架构通常都具有很多依赖,当一个应用高度耦合其他服务时非常危险且容易导致失败,当某一个服务发生故障,导致请...

  • SpringCloud那些事-Zuul

    API 网关是对外服务的一个入口,其隐藏了内部架构的实现,是微服务中必不可少的一个组件。Zuul 就是这个角色,它...

  • SpringCloud那些事-Ribbon

    目前主流的负载方案有两种:一种是集中式负载均衡,在消费者和服务者提供中间使用独立的代理方式进行负载,比如 Ngin...

  • SpringCloud那些事-Feign

    Feign可以把Rest的请求进行隐藏,伪装成类似SpringMVC的Controller一样。你不用再自己拼接u...

  • SpringCloud那些事-Eureka

    Eureka,古希腊词语,意思为找到了、我发现了,在微服务架构中,它主要是作为注册中心,实现服务治理功能。Eure...

  • springcloud之初识hystrix熔断器----程序的保

    1.1.简介 Hystix,即熔断器。 Hystix是Netflix开源的一个延迟和容错库,用于隔离访问远程服务、...

  • Hystrix源码分析(一)

    一、开篇 hystix相信大家都不陌生。github地址:https://github.com/Netflix/H...

  • 四、Hystix熔断器

    一、简介 Hystix,即熔断器(也叫断路器)。 主页:https://github.com/Netflix/Hy...

  • JavaEE进阶知识学习-----SpringCloud(一)概

    SpringCloud概述 SpringCloud是什么 SpringCloud,基于SpringBoot提供的一...

网友评论

      本文标题:SpringCloud那些事-Hystix

      本文链接:https://www.haomeiwen.com/subject/lpxqgctx.html