当前位置: 首页 > news >正文

使用springCloud构建微服务——Hystrix实现容错及打印日志

一、前期准备

先创建一个注册中心,一个消费者服务,一个生产者服务,由于之前写过,这里不多写了,请参考前面的博文。

使用springCloud构建微服务实战

二、本篇主题

Hystrix是由Netflix开源的一个延迟和容错库,用于隔离访问远程系统,服务或者第三方库,防止级联失败,从而提高系统的可用性和容错性。spring Cloud默认为Feign整合了Hystrix,在下面的操作中,不需要引入依赖了,前面已经引入过了Feign,在上篇的基础上接着操作。

代码语言:javascript

AI代码解释

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

重点:Feign已经为我们集成了Hystrix,经过查证,原来feign集成hystrix需要配置开启,如果不开启,会报错,不会去回退页面的。

1、在配置文件application.properties中添加:

(1)因为不知道feign集成hystrix需要配置开启,我花费了三四个小时找bug,一直不能在服务失败后,回退页面并打印日志。

代码语言:javascript

AI代码解释

feign.hystrix.enabled=true

2、创建一个Feign接口SchedualServiceHi,并添加@FeignClient注解

(1)注解中的name值是我们调用的其他应用名。该应用名中必须有该类中地址的映射,否则会调用出错。

(2)fallbackFactory的值是调用出错时会去调用的方法。

代码语言:javascript

AI代码解释

@FeignClient(name= "myprovider",fallbackFactory = FeignClientFallbackFactory.class) public interface SchedualServiceHi { @RequestMapping("/index") String aa(); @RequestMapping("/bb") public boolean mmm(@RequestParam("name") String name, @RequestParam("pwd") String pwd); }

3、调用出错的类如下,消费者在调用提供者的方法出错时会返回调用这个类对应的方法,同时打印日志。

(1)该类需要实现FallbackFactory接口,并重写方法。

(2)接口的泛型为上面的Feign接口SchedualServiceHi。

(3)声明了打印日志的print属性,日志放在各个fallback方法中,不要直接放在create方法中。

(4)类上添加@component注解。

代码语言:javascript

AI代码解释

import org.slf4j.Logger; import org.slf4j.LoggerFactory; @Component public class FeignClientFallbackFactory implements FallbackFactory<SchedualServiceHi> { // 打印日志 private static final Logger print= LoggerFactory.getLogger(FeignClientFallbackFactory.class); @Override public SchedualServiceHi create(Throwable throwable) { return new SchedualServiceHi() { @Override public String mm() { print.info("fallback; reason was:",throwable); return "服务报错了"; } }; } }

三、测试结果

1、将注册中心,生产者,消费者运行,请求消费者的mindex地址,此时能够正确跳转。

2、当把provider关闭后,再次访问,页面会返回服务报错了,同时会打印错误原因日志如下:

(1)意思:客户服务异常,加载没有可用的myprovider服务,为客户端。

四、总结

以上,我们使用Hystrix实现了微服务的容错,同时发生回退时,打印出来错误日志

http://www.jsqmd.com/news/525215/

相关文章:

  • 手把手教你优化小程序登录体验:一个按钮搞定微信手机号授权与后端Token处理
  • FlowState Lab 模型版本管理与回滚操作指南
  • 探索西门子S7 - 200PLC和MCGS6.2组态的楼宇温度与空调运行控制系统
  • 基于Hunyuan-MT-7B的运维文档多语言自动化系统
  • XPLDevices:面向X-Plane硬件开发的嵌入式固件框架
  • 从SORT到BoT-SORT:一文读懂多目标跟踪MOT算法这十年的“内卷”与进化
  • AI手势识别创意应用:零代码实现彩虹骨骼音乐交互
  • ROS2导航实战:用slam_toolbox+TurtleBot3从零搭建室内地图(附避坑指南)
  • 告别yum默认版本!在CentOS7上手动安装最新版LibreOffice 6.0.5的完整流程
  • PaddlePaddle-v3.3案例展示:低成本GPU实现高性能AI推理的真实效果
  • CEC2017测试集全攻略:如何用MATLAB一键运行12种算法并自动生成收敛曲线与评价报告
  • 绿联NAS部署aria2容器与Cloudreve离线下载的完整指南
  • 使用Qwen3进行自动化作业批改与反馈生成实践
  • OptiScaler终极指南:让任何显卡都能享受DLSS级画质增强的5步教程
  • Qwen3-TTS-12Hz-1.7B-CustomVoice在广播系统中的应用:自动化节目生成
  • 电动汽车充电负荷概率预测:条件扩散模型的奇妙之旅
  • S-5851A温度传感器Arduino驱动库深度解析
  • 别再“对不齐账”了:云原生时代的数据一致性,本质是工程能力的较量
  • 开源广告拦截工具iSponsorBlockTV:智能跳过视频干扰内容的跨设备部署方案
  • 通义千问1.5-1.8B-Chat-GPTQ-Int4与Git工作流集成:自动生成提交信息与代码审查
  • iOS 26 兼容性测试全攻略:从设备适配到 uni-app 优化,确保流畅用户体验
  • 从倒立摆到机器人后空翻:LQR与MPC在动态平衡控制中的实战演进
  • 西门子 S7-200PLC 和组态王的六层电梯控制系统探索
  • Kimi-VL-A3B-Thinking开源部署教程:低成本GPU算力跑通长思考CoT多轮对话
  • 航天器姿态控制:应对执行器饱和与故障的挑战与解法
  • charLCD嵌入式LCD驱动库:HD44780底层控制与工程实践
  • 用Python和MNE库搞定脑电信号预处理:从原始数据到干净EEG的保姆级避坑指南
  • Paimon与FlinkCDC数据同步实战:深度解析依赖冲突与Maven Shade重定位方案
  • FPGA高速接口Aurora8B/10B协议实战:从IP核配置到数据流优化
  • Vue项目里用vue-qrcode-reader插件实现扫码,别忘了配HTTPS(附完整配置与避坑指南)