Spring Cloud Learning | 第五篇:服务容错保护(Hystrix)

一. Hystrix断路器简介

      在微服务架构中,我们将系统拆分为很多服务单元,各单元的应用间通过服务注册于订阅的方式互相依赖。由于每个服务单元都在不同的进程中运行,依赖通过远程调用的方式执行,这样就有可能因为网络原因或是依赖服务自身问题出现调用故障或延迟,而这些问题会直接导致调用方的对外服务也出现延迟,若此时调用方的请求不断增加,最后就会因等待出现故障的依赖方响应形成任务积压,最终导致自身服务的瘫痪。为了解决这样的问题,产生了断路器等一系列的服务保护机制。

      在分布式架构中,断路器模式也就是,当某个服务单元发生故障之后,通过断路器的故障监控,向调用方返回一个错误响应,而不是长时间的等待。这样就不会使得线程因调用故障服务被长时间占用不释放,避免了故障在分布式系统中的蔓延。

      接下来我们来使用Hystrix实现服务容错保护。

二. 快速入门

2.1 首先准备之前第三篇文章的工程,启动eureka-server工程,端口号为8761,启动eureka-client工程,端口号为8762。

2.2 在Ribbon中使用断路器

      修改第三篇文章的service-ribbon工程,首先在pom.xml中加入spring-cloud-starter-hystrix依赖:

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
      在工程的启动类加上@EnableHystrix注解开启断路器功能:
@SpringBootApplication
@EnableDiscoveryClient
@EnableHystrix
public class ServiceRibbonApplication {

	public static void main(String[] args) {
		SpringApplication.run(ServiceRibbonApplication.class, args);
	}
	
	@Bean
	@LoadBalanced
	RestTemplate restTemplate() {
		return new RestTemplate();
	}
}
      修改HelloService类,在helloService方法上加上@HystrixCommand注解,表示开启熔断器功能,并指定回调方法,也就是当helloService方法出现故障后调用的方法:
@Service
public class HelloService {

  @Autowired
  RestTemplate restTemplate;

  @HystrixCommand(fallbackMethod = "helloError")
  public String helloService(String name) {
    return restTemplate.getForObject("http://HELLO-SERVICE/hello?name="+name, String.class);
  }
 
  public String helloError(String name) {
    return "hello " + name + ", error!";
  }

}
      启动service-ribbon工程,访问http://localhost:8764/hello?name=Jack看到:
http://localhost:8764/hello?name=Jack
      此时关闭eureka-client工程,再次访问http://localhost:8764/hello?name=Jack看到:

hello Jack, error!

      说明了当eureka-client工程不可用的时候,service-ribbon调用 hello-service的API接口时,会执行快速失败,直接返回一组字符串,而不是等待响应超时,这很好的控制了容器的线程阻塞。

      其实,Hystrix默认超时时间为2000毫秒,也就是当服务消费者调用服务超时时就会触发熔断请求,这时就会调用回调逻辑返回结果。

      

      源码下载:https://github.com/lingd3/SpringCloudLearning/tree/master/chapter5







  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值