springcloud ----Hystrix熔断器

在分布式系统里面,许多依赖难免会调用失败,比如超时等,Hystrix能保证一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障。

当某个服务单元发生故障时,通过熔断器的故障监控,向调用方返回一个符合预期的,可处理的备选响应,而不是长时间的等待或抛出无法调用的异常,这样就可以保证服务调用方的线程不会长时间被暂用,从而避免故障在分布式系统中蔓延。

Hystrix是服务端的处理技术

pom文件中添加下面依赖

<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>

配置文件中配置注册到eureka中心以及一些mybatis等相关的信息,

启动类上添加@EnableCircuitBreaker注解,开启Hystrix的熔断器功能

Hystrix主要有以下几点功能

服务降级

 在一些情况下,资源快耗尽时,先放弃一些不重要的服务

服务熔断

在controller的接口上添加@HystrixCommand(fallbackMethod="processHystrix_Get"),并定义处理错误的方法,

服务熔断用一句话来解释就是,接口里面有一些情况,比如报错跑异常时,就由HystrixCommand注解上定义的fallbackMethod来处理

这种方式有一个很严重的问题,每个接口都要有一个对应的fallbackMethod方法,这样会造成controller中方法膨胀,异常处理与业务逻辑也高耦合

针对这个问题,可以将fallbackMethod放到service层的接口中,在接口中处理这个问题,这样controller中就不会有这2个问题了

在service接口中处理这个问题需要创建一个类,实现FallbackFactory接口,重写create方法即可,该方法上记得加上@Component注解,具体如下,

@Component
public class DeptClientServiceFallBackFactory implements FallbackFactory<DeptClientService> {

	@Override
	public DeptClientService create(Throwable cause) {
		
		return new DeptClientService() {
			
			@Override
			public List<Dept> getAll() {
				
				return null;
			}
			
			@Override
			public Dept get(Long id) {
				Dept dept = new Dept();
				dept.setDeptno(id);
				dept.setDname("找不到相关信息");
				return dept;
			}
			
			@Override
			public boolean add(Dept dept) {
				
				return false;
			}
		};
	}

}

create方法返回一个具体的service接口的实例,重写接口的方法,重写的内容就是接口调用报错是的处理逻辑,也就是前面讲的fallbackMethod方法中的内容。

最后要在接口的@FeignClient注解里加上刚创建的 DeptClientServiceFallBackFactory类

@FeignClient(value = "MICROSERVICECLOUD-DEPT", fallbackFactory=DeptClientServiceFallBackFactory.class)

最后在配置文件中添加一下对Hystrix的支持 

服务限流

实时监控

后面补充

猜你喜欢

转载自blog.csdn.net/zgq_hw/article/details/84453350