微服务(四) 【手摸手带你搭建Spring Cloud】 Hystrix 熔断器 什么是熔断器? 什么是Hystrix?为什么要熔断器 Hystrix用来做什么? 作用是什么? |
您所在的位置:网站首页 › 冰凌花的用途是什么和什么 › 微服务(四) 【手摸手带你搭建Spring Cloud】 Hystrix 熔断器 什么是熔断器? 什么是Hystrix?为什么要熔断器 Hystrix用来做什么? 作用是什么? |
上一章我们讲了负载均衡 文章目录 前言一、Hystrix是什么?二、Hystrix的作用是什么?Hystrix具体要保护什么?2.1什么是微服务-雪崩效应2.1服务熔断原理 三、实践 前言 一、Hystrix是什么?有意思的是Hystrix在英文里面是豪猪的意思,手册上这个图笑死我了,这个分明是熊,哪会是猪,变种猪么? 仔细看图,会发现这是满身的刺,不管是熊是猪,给人感觉伪装成了刺猬。一眼看过去很容易理解,满身刺和伪装目的是保护自己的作用。因此从图中就可以看出它在微服务中是一款提供保护机制的组件。 二、Hystrix的作用是什么?Hystrix具体要保护什么?Hystrix是Netflix开源的一个延迟和容错库,用于隔离访问远程服务和第三方库级联故障。也就是说Hystrix是一个库,可以做什么?防止出现级联失败。 2.1什么是微服务-雪崩效应微服务中,服务关系调用,错综复杂,一个请求可能需要调用多个服务接口才能实现,会形成非常复杂的调用链路。 假设 我们有两个访问量比较大的服务A和B,这两个服务分别依赖C和D,C和D服务都依赖E服务 所有服务正常提供服务的情况下,请求顺利被处理完,后面的请求一样被处理。
在服务熔断中使用的熔断器,也叫断路器Circuit Breaker 熔断器与家里使用的电路断路器原理类似;当电路发生短路的时候能够立刻熔断,避免灾难发生。在分布式系统中应用服务熔断之后;服务调用方可以自己判断哪些服务反应慢或者存在大量超时,可以针对这些服务进行主动熔断,防止整个系统被拖垮。 Hystrix的服务熔断机制,可以实现弹性容错;当服务请求情况好转之后;可以自动重连。通过短路的方式,将后续的请求直接拒绝,一段时间(一般是5秒)之后允许部分请求通过,如果调用成功则回到短路器关闭状态,否则继续打开,拒绝请求服务。 老样子,先拿到上一章的工程继续修改 上一章工程 我们要用Hystrix,当然是需要引入包了,因此我们需要在custom-demo工程pom中引入。 org.springframework.cloud spring-cloud-starter-netflix-hystrix 2.1.1.RELEASE随后要在custom-demo工程的handler层UserHandler添加一个异常时跳转的方法。 @RestController @RequestMapping("user") @DefaultProperties(defaultFallback = "defaultFallback") public class UserHandler { @Autowired private RestTemplate restTemplate; @Autowired private UserService userService; @Autowired private DiscoveryClient discoveryClient; @GetMapping("/{id}") @HystrixCommand public String doGet(@PathVariable Long id){ // String url = "http://127.0.0.1:1001/user/"+id; // return "custom-Service回应:"+restTemplate.getForObject(url, String.class); // return userService.doGetUser(id); // List serviceInstances= discoveryClient.getInstances("user-service"); // String url = "http://"+serviceInstances.get(0).getHost()+":"+serviceInstances.get(0).getPort()+"/user/"+id; /** * 模拟id=1时目标服务器异常。 */ if(1==id){ throw new RuntimeException("要访问的服务器异常"); } String url = "http://user-service/user/"+id; return "custom-Service[通过注册中心拉取服务]回应:"+restTemplate.getForObject(url, String.class); } /** * 检测到doGet异常时,会跳到这里来 * @return */ public String defaultFallback(){ return "默认提示:要访问的服务器异常!"; } }启动类加上@EnableCircuitBreaker注解,打开熔断器。 @SpringBootApplication @EnableEurekaClient @EnableCircuitBreaker public class CustomService { public static void main(String[] args) { SpringApplication.run(CustomService.class, args); } @Bean @LoadBalanced //负载均衡 public RestTemplate restTemplate(){ return new RestTemplate(); } }随后可以运行eureka、user-service、custom-demo三个工程,启动好之后访问 http://localhost:9001/user/1 二十次以上,这样就会打开断路器 此时再访问 http://localhost:9001/user/2 就会看到 本章例程 那么本章到这就先结束了,下一章介绍一下Feign。 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |