在微服务中,一旦有一个服务器出错,对于整个业务来说带来的灾害是不可估计的,因此,我们需要有一定的容错处理,在出错时降低对业务的影响
因此Hystrix就应运而生
它是通过超时处理和断路器模式进行容错处理,断路器模式类似于我们正常使用的电流断路器,这里就不多说了,直接说下此机制是怎么使用的吧。

本例子代码:

Eureka:https://github.com/lihang212010/demo-cloud-Eureka/tree/master/demo-cloud-Eureka
微服务:https://github.com/lihang212010/demo-cloud-user
Hystrix https://github.com/lihang212010/Hystrix

添加依赖

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

它的使用方法是
**@HystrixCommand(fallbackMethod = “××××”)"
××××可以是方法(正常使用)
也可以是接口类(Feign使用)

这是我控制器的使用,在方法中加上Throwable throwable参数可以看出容错原因

@RestController
public class MoviesController {
  private static final Logger LOGGER=LoggerFactory.getLogger(MoviesController.class);
	@Autowired
	
	private RestTemplate restTemplate;
@HystrixCommand(fallbackMethod = "findByIDFallback")  //使用Hystrix注解
	@RequestMapping("/user/{id}")
	public Users findById(@PathVariable Long id) {
		return this.restTemplate.getForObject("http://demo-cloud-user/"+id, Users.class);
	}	

		public Users findByIDFallback(Long id,Throwable throwable) {   //注解对应的方法
			LOGGER.error("进入回退方法的异常为:"+throwable);
			Users users=new Users();
			users.setName("出错时用户");
			return users;
		}
	} 

然后在运行类中需要加@EnableHystrix 注解

Users是一个数据POJO

我们首先开启我们Eureka
接着是2个微服务
最后开启我们的Hystrix(我数据库并无数据)
在这里插入图片描述
然后关掉两个微服务
再次访问在这里插入图片描述
并没有报错而是回到了我们设置的出错时的数据。
而如果不设置Hystrix时我们程序会报404错误。

Feign的容错处理因为是接口的原因需要继承
我单独放一博客上吧,不然一堆图片看着烦人
博客地址(没有说明我没写好)

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐