Spring cloud(4)-熔断(Hystrix)

栏目: Java · 发布时间: 6年前

内容简介:由于网络原因或者自身的原因,雪崩应对策略:基于Netflix的开源框架 Hystrix实现的框架目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。

由于网络原因或者自身的原因, 服务并不能保证100%可用 ,如果 单个服务出现问题 ,调用这个服务就会 出现线程阻塞 ,此时若有大量的请求涌入,Servlet容器的线程资源会被消耗完毕,导致服务瘫痪。 服务与服务之间的依赖性 ,故障会传播,会对整个微服务系统造成灾难性的严重后果,这就是服务故障的 “雪崩”效应

雪崩应对策略:

  • 流量控制 :控制的方式有很多种,类似队列,令牌,漏桶等等。
  • 网关限流 : 因为 Nginx 的高性能, 目前一线互联网公司大量采用 Nginx+Lua 的网关进行流量控制, 由此而来的 OpenResty 也越来越热门. 使用 OpenResty ,其是由 Nginx核心 加很多第三方模块组成,其最大的亮点是默认集成了 Lua开发环境 ,使得 Nginx 可以作为一个 Web Server 使用。 借助于 Nginx事件驱动模型非阻塞IO ,可以实现高性能的Web应用程序。
    而且 OpenResty 提供了大量组件如 Mysql、 Redis 、Memcached 等等,使在 Nginx 上开发 Web应用 更方便更简单。目前在京东如实时价格、秒杀、动态服务、单品页、列表页等都在使用 Nginx+Lua 架构,其他公司如淘宝、去哪儿网等。
  • 用户交互限流 :友好的提示,从源端限制流量流入。

基于Netflix的开源框架 Hystrix实现的框架目标在于通过控制那些访问远程系统、服务和第三方库的节点,从而对延迟和故障提供更强大的容错能力。 Hystrix具备了服务降级、服务熔断、线程隔离、请求缓存、请求合并以及服务监控等强大功能。

Spring cloud(4)-熔断(Hystrix)
添加依赖
<!-- hystrix 断路器 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
复制代码

restTempate集成hystrix

@EnableHystrix
@EnableDiscoveryClient
@SpringBootApplication
public class RibbonConsumerApplication {

    @LoadBalanced
    @Bean
    RestTemplate restTemplate() {
        return new RestTemplate();
    }

	public static void main(String[] args) {
		SpringApplication.run(RibbonConsumerApplication.class, args);
	}
}
复制代码

Feign是自带断路器的 ,如果在 Dalston版本 的,默认是没有打开的,通过配置打开

feign:
  hystrix:
    enabled: true
复制代码

@HystrixCommand 表明该方法为hystrix包裹,可以对依赖服务进行隔离、降级、快速失败、快速重试等等

fallbackMethod
commandProperties
ignoreExceptions
groupKey()
commandKey

消费者提供方法(defaultStores)

restTemplate配置使用

@RestController
public class ConsumerController {

    @Autowired
    private RestTemplate restTemplate;

    @HystrixCommand(fallbackMethod = "defaultStores")
    @GetMapping(value = "/hello")
    public String hello() {
        return restTemplate.getForEntity("http://eureka-provider/", String.class).getBody();
    }

    public String defaultStores() {
        return "Ribbon + hystrix ,提供者服务挂了";
    }

}
复制代码

feign配置使用

@EnableHystrix
@EnableFeignClients
@EnableDiscoveryClient
@SpringBootApplication
public class FeignConsumerApplication {

	public static void main(String[] args) {
		SpringApplication.run(FeignConsumerApplication.class, args);
	}
}
复制代码
@FeignClient(value ="eureka-provider",fallbackFactory = HystrixClientFallbackFactory.class)
public interface  HomeClient {

    @GetMapping("/")
    String consumer();
}
复制代码
@Component
public class HystrixClientFallbackFactory implements FallbackFactory<HomeClient> {

    @Override
    public HomeClient create(Throwable throwable) {
        return () -> "feign + hystrix ,提供者服务挂了";
    }
}
复制代码

Hystrix Dashboard 是作为断路器状态的一个组件,提供了数据监控和友好的图形化界面。

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

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
复制代码

在程序的入口加上 @EnableHystrixDashboard 注解,开启 HystrixDashboard

结语

github 上有关于 Spring Cloud 完整的部署。

最后, 给个 star 吧 ~

个人博客 ~

简书 ~


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Java并发编程的艺术

Java并发编程的艺术

方腾飞、魏鹏、程晓明 / 机械工业出版社 / 2015-7-1 / 59.00元

并发编程领域的扛鼎之作,作者是阿里和1号店的资深Java技术专家,对并发编程有非常深入的研究,《Java并发编程的艺术》是他们多年一线开发经验的结晶。本书的部分内容在出版早期发表在Java并发编程网和InfoQ等技术社区,得到了非常高的评价。它选取了Java并发编程中最核心的技术进行讲解,从JDK源码、JVM、CPU等多角度全面剖析和讲解了Java并发编程的框架、工具、原理和方法,对Java并发编......一起来看看 《Java并发编程的艺术》 这本书的介绍吧!

Base64 编码/解码
Base64 编码/解码

Base64 编码/解码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具