【微服务】服务熔断与降级(二)
上篇博客,我们了解到服务熔断和降级解决的问题,这篇小编将为您介绍服务熔断与降级的用法,从实践中更深理解熔断与降级。
Hystrix断路器
一个用于处理分布式系统的延迟和容错的开源库,分布式系统中,许多依赖不可避免会调用失败,比如超时、异常等,Hystrix能保证,一个依赖出问题,不会导致整体服务失败,避免级联故障,提高分布式系统的弹性。
不错,服务熔断和降级就靠它了。
服务熔断:
从服务提供者考虑:消费者调用提供者,提供者无法提供服务时(异常),提供者会给出提示。
1、添jar
2、改application.yml
3、启动类加@Enable…注解
4、写各层代码:dao/service/controller
@RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
//一旦调用服务方法失败并抛出错误信息后,会自动调用@HystrixCommand标注的fallbackMethod,调用类中的指定方法
@HystrixCommand(fallbackMethod = "processHystrix_Get")
public Dept get(@PathVariable("id") Long id) {
Dept dept = service.findById(id);
if (null == dept) {
throw new RuntimeException("该ID:" + id + "没有对应的信息");
}
return dept;
}
public Dept processHystrix_Get(@PathVariable("id") Long id) {
return new Dept().setDeptno(id).setDname("该ID:" + id + "没有对应的信息,,null--@HystrixCommand").setDb_source("no this database in MySQL");
}
但是这种方式,有不合理的地方:
第一、加一个方法都要加一个@Hystrix注解,方法膨胀;
第二、处理异常和业务逻辑高耦合。根据面向切面AOP,可以实现处理异常和业务逻辑解耦。
要实现解耦,我们看controller,注入了service,所以我们可以把异常放到接口的地方,这样就可以解耦。别急,接着看服务降级。
服务降级:
降级是在客户端。
在服务熔断后,服务器不再被调用,消费端会调用fallbackfactory的方法,拿到提示:服务提供者已停止服务,不要再访问。
这就是所谓服务水平下降,但还可用,比直接挂掉要好。
controller代码:
@Autowired
private DeptClientService service;
@RequestMapping(value = "/consumer/dept/get/{id}")
public Dept get(@PathVariable("id") Long id)
{
return this.service.get(id);
}
api层定义:DeptClientService
//该接口下哪个方法抛异常,会调fallbackFactory
@FeignClient(value = "MICROSERVICECLOUD-DEPT",fallbackFactory=DeptClientServiceFallbackFactory.class)
public interface DeptClientService
{
@RequestMapping(value = "/dept/get/{id}", method = RequestMethod.GET)
public Dept get(@PathVariable("id") long id);
}
定义DeptClientServiceFallbackFactory类:
@Component // 不要忘记添加
public class DeptClientServiceFallbackFactory implements FallbackFactory<DeptClientService> {
@Override
public DeptClientService create(Throwable throwable)
{
return new DeptClientService() {
@Override
public Dept get(long id)
{
return new Dept().setDeptno(id).setDname("该ID:" + id + "没有没有对应的信息,Consumer客户端提供的降级信息,此刻服务Provider已经关闭")
.setDb_source("no this database in MySQL");
}
@Override
public List<Dept> list()
{
return null;
}
@Override
public boolean add(Dept dept)
{
return false;
}
};
}
}
Dashboard
Hystrix dashboard,一个可视化界面,监控所有Provider,所有Provider都需要配置监控依赖spring-boot-starter-actuator。
填好对应信息,监控的服务器,点击Monitor Stream即可看到监控页面:
监控窗口怎么看?
7色——7种颜色
1圈——绿色的圈,颜色变化代表实例的健康程度,它的健康度从绿色<黄色<橙色<红色递减,大小代表实例的请求流量的变化,快速发现故障实例和高压实例
1线——流量上升和下降趋势
总结:
技术源于生活。
随着我们划分的微服务越来越多,各种配置我们就要统一管理了,分布式配置中心Config,您应该想了解的,请看下篇博客!
感谢您的阅读!
还没有评论,来说两句吧...