SpringCloud学习之路(五) 断路器 Hystrix(Finchley版本)
Hystrix
[hɪst’rɪks],中文含义是豪猪,因其背上长满棘刺,从而拥有了自我保护的能力。本文所说的Hystrix是Netflix开源的一款容错框架,同样具有自我保护能力。
Hystrix 简介
在微服务架构中,微服务之间互相依赖较大,相互之间调用必不可免的会失败。但当下游服务A因为瞬时流量导致服务崩溃,其他依赖于A服务的B、C服务由于调用A服务超时耗费了大量的资源,长时间下去,B、C服务也会崩溃。Hystrix就是用来解决服务之间相互调用失败,避免产生蝴蝶效应的熔断器,以及提供降级选项。Hystrix通过隔离服务之间的访问点,阻止它们之间的级联故障以及提供默认选项来实现这一目标,以提高系统的整体健壮性
Hystrix作用
用来避免由于服务之间依赖较重,出现个别服务宕机、停止服务导致大面积服务雪崩的情况。
下面开始正题
我们在上面的一节已经整合了Feign ,我们这节就在Feign这个里面添加 断路器 Hystrix。
在Feign 使用断路器
打开service-feign工程下的pox.xml 在里面添加如下依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
在程序的启动类ServiceFeignApplication加@EnableHystrix注解开启Hystrix:
@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableHystrix
public class ServiceFeignApplication {
public static void main(String[] args) {
SpringApplication.run(ServiceFeignApplication.class, args);
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
Feign是自带断路器的,在D版本的Spring Cloud之后,它没有默认打开。需要在配置文件中配置打开它,在配置文件加以下代码:
feign:
hystrix:
enabled: true
编写一个接口错误返回实现类 MessageServiceFallback
@Configuration
public class MessageServiceFallback implements FeignTestServer {
@Override
public String getTest(String str) {
System.out.println("调用消息接口失败,对其进行降级处理!");
return "消息接口繁忙,请稍后重试!";
}
}
这里实现了 implements FeignTestServer 这个接口 而且实现了里面方法,这个作用就是当getTest这个接口出现调用失败的时候会快速返回错误。不会去等待。
改造一下 FeignTestServer 如果 加入了 MessageServiceFallback
@FeignClient(value = "SERVICE-CLIENT",fallback = MessageServiceFallback.class)
public interface FeignTestServer {
@GetMapping(value = "/getTest")
String getTest(@RequestParam(value = "str") String str);
}
这样就完成了。
现在启动依次启动 eureka-server、eureka-client、service-feign
然后访问 http://localhost:8085/hi?str=fast
可以看到接口正常的访问
然后我们把这个 eureka-client 停掉
返回我们自己定义的消息。而且即使你不断刷新,它也会立马返回,不会等待。
然后你在启动 eureka-client 再次刷新 它有正常了。
这就是 Hystrix