我是靠谱客的博主 舒适服饰,这篇文章主要介绍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依赖:

复制代码
1
2
3
4
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-hystrix</artifactId> </dependency>
      在工程的启动类加上@EnableHystrix注解开启断路器功能:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
@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方法出现故障后调用的方法:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@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看到:
复制代码
1
http://localhost:8764/hello?name=Jack
      此时关闭eureka-client工程,再次访问http://localhost:8764/hello?name=Jack看到:

复制代码
1
hello Jack, error!

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

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

      

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







最后

以上就是舒适服饰最近收集整理的关于Spring Cloud Learning | 第五篇:服务容错保护(Hystrix)的全部内容,更多相关Spring内容请搜索靠谱客的其他文章。

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

评论列表共有 0 条评论

立即
投稿
返回
顶部