什么要有Hystrix?
雪崩
就是来微服务相互访问的过程中,某个微服务出现等待情况,造成其他调用这个微服务的微服务都处于等待状态,最终造成服务崩溃。
Hystrix就是为了防止雪崩。
Hystix如何防止雪崩
- 线程隔离
在之前,比如tomcat中,所有的访问享有所有的线程权限。默认tomcat有200个线程。
(通铺)
我们现在的微服务都是设定好了,自己微服务需要的线程,当某个微服务线程占满的时候,并不会影响其他微服务。(单间)
- 服务降级
就是当访问微服务阻塞的时候,当超过一定时间,返回给错误的结果。而进行友好的提示。
造成阻塞的假象
就在服务提供者代码里添加线程休眠
try { Thread.sleep(10*1000); } catch (InterruptedException e) { e.printStackTrace(); }
- 局部服务降级
- 添加依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-hystrix</artifactId> </dependency>
修改属性文件- 添加注解
@EnableHystrix
因为后面要将熔断
@EnableCircuitBreaker
最后发现
@SpringBootApplication
@EnableDiscoveryClient
@EnableCircuitBreaker
使用
@SpringCloudApplication
- 添加代码
在要进行服务降级的方法上,添加注解,指定注解的回调函数
@HystrixCommand(fallbackMethod = "helloFallback")
实现回调函数(参数,返回值类型一致)
public Object helloFallback(int id){ User user = new User(); user.setId(id); user.setName("降级处理了"); return user; }
- 全局服务降级
类上添加
@DefaultProperties(defaultFallback = "myFallback")
方法上添加
@HystrixCommand
实现回调方法
public String myFallback(){ return "降级处理了111"; }
- 熔断机制
总结
Ribbon是负载均衡,负载均衡就是让所有的访问请求,都平均的负载到每个服务上,这种负载均衡的策略称为简单的轮询。
高可用的概念是任何一个服务都有备用,当某个服务意外停止后,备用服务依然可用。
集群的概念就是多台服务器实现一个功能,而这些服务器被称为集群。
我们可以通过添加依赖--添加注解--修改代码,来开启我们的负载均衡。配置完成后我们可以通过查找RibbonLoadBalancerClient类的reconstructURL方法来查看负载均衡。
重试机制就是springCloud整合了springRetry来增强我们的RestTemplate的重试能力,当一次服务调用失败之后,不会立即抛出,而是再次重试该服务。