服务降级
因为Feign项目的不成功,导致服务降级也无法完成
问题已解决,版本问题
- 根据实际业务情况以及流量,对一些服务喝页面有策略的不处理或换简单的方式处理,从而释放服务器资源以保证核心服务正常运作或高效运作
- 使用场景:
- 当负载超过了预设的阀值或流量超出预计,保证重要的服务能正常运行,将不紧急,不重要的服务延迟使用或暂停使用
- 核心设计
- 服务降级-分布式开关
- 超时降级:设定超时重试次数和机制,使用异步机制探测恢复情况
- 失败次数降级:一些不稳定的API,当失败次数达到一定阀值,自动降级,使用异步机制探测回复情况
- 故障降级:调用的远程服务挂掉(网络故障,DNS故障,Http服务返回错误的状态码和RPC服务抛出异常)可以直接降级
- 限流降级:触发了限流超额,可以使用暂时屏蔽的方式来进行短暂的屏蔽
- 服务降级-分布式开关
- 配置中心
- 服务降级的配置信息是集中式管理的,可视化界面
- 配置中心和应用之间需要网络通信,因此网络因素可能会导致配置信息丢失,导致变更不及时
- 配置中心需要达到几个点:
- 启动主动拉取配置:用于初始化配置,减少第一次定时周期
- 发布订阅配置:用于实时配置以及及时变更
- 定时拉取配置:用于解决发布订阅失败或消息丢失的情况
- 离线文件缓存配置:用于临时解决重启连不上配置中心的问题
- 可编辑配置文档:用于直接编辑文档的方式来实现配置的定义
- 提供Telnet命令变更配置:用于解决配置中心失效而不能变更配置的情况
- 后面还有好多,暂不做记录
Demo
-
consumer
-
主要操作
- 实现FallbackFactory接口
- FeignService接口降级实现
-
修改FeignClient增加服务降级功能fallbackFactory
-
开启服务降级
-
@Component public class DeptConsumerFallbackFactory implements FallbackFactory { @Override public FeignService create(Throwable throwable) { return new FeignService() { @Override public String test() { return "FallbackFactory ==================test"; } @Override public String Test(int id) { return "FallbackFactory ==================Test "+id; } }; } }
-
实现FallbackFactory接口,里面实现服务降级的备选方案,当provider服务关闭时,客户端也能自己做出备选响应
-
@Component交给spring管理
-
@Component @FeignClient(value = "PROVIDER-8001" ,fallbackFactory = DeptConsumerFallbackFactory.class) public interface FeignService { @RequestMapping(method = RequestMethod.GET ,value = "/test") String test(); @RequestMapping(method = RequestMethod.GET ,value = "/hystrix/{id}") String Test(@PathVariable(value = "id")int id); }
-
FeignClient加入实现服务降级注入的bean
-
feign.hystrix.enabled=true
-
开启服务降级,默认false
-
测试
-
开启provider、consumer、Eureka
-
consumer能正常访问provider的服务
-
当provider可能因为某种原因停止,consumer不可用也能获取提示信息,而不至于挂起耗死服务器