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

通过AOP实现项目中业务服务降级功能

最近项目中需要增强系统的可靠性,比如某远程服务宕机或者网络抖动引起服务不可用,需要从本地或者其它地方获取业务数据,保证业务的连续稳定性等等。这里简单记录下业务实现,主要我们项目中调用远程接口失败时,需要从本地数据库中某表获取数据(本地数据库某表每天定时同步远程接口数据)。

调用大致逻辑:
前端–>服务A–>服务B(这里时公服,用于维护权限、人员等信息)
其中服务B调用远程服务故障,进行服务降级,从服务B的本地数据库查询数据

一、创建切面,统一业务降级

项目中实际是通过故障注入方式,模拟远程接口宕机。这里简单通过除法异常模拟故障。

package com.example.demospringmybatisplus.service;import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;import lombok.extern.slf4j.Slf4j;/*** 调用远程服务异常降级处理类** @DATE 2024/5/8**/
@Slf4j
@Component
@Aspect
public class DataExceptionDegradeHandler {@Around("execution(* com.example.demospringmybatisplus.processors.DataOperationService.findList(..))")public Object degrade(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println("Around,注解方式实现aop服务降级----");try {// 模拟调用远程服务异常int i = 1 / 0;return joinPoint.proceed();} catch (Exception e) {// 调用远程服务异常,改为从本地或其它地方获取业数据System.out.println("调用远程服务异常,这里模拟从其它地方获取业务数据");return 1;}}
}

二、测试验证

在这里插入图片描述
在这里插入图片描述
可以看到,前端请求服务A的某方法,会被AOP拦截,执行我们自定义的降级业务逻辑,实现了服务降级功能。

源码下载:点我下载 欢迎Star !

http://www.lryc.cn/news/343858.html

相关文章:

  • LeetCode:盛最多水的容器
  • 阿里云 OSS桶对象存储攻防
  • 外网禅道配置
  • MM模块学习一(供应商创建,物料类型的定义及功能)
  • 玩comfyui踩过的坑之使用ComfyUI_Custom_NODES_ALEKPET翻译组件问题
  • (类)偏特化Partial Specialization
  • TypeScript 基础学习笔记:interface 与 type 的异同
  • 【管理咨询宝藏95】SRM采购平台建设内部培训方案
  • 第七届机电、机器人与自动化国际会议(ICMRA 2024)即将召开!
  • 【智能楼宇秘籍】一网关多协议无缝对接BACnet+OPC+MQTT
  • leetCode68. 文本左右对齐
  • 搜狗输入法 PC端 v14.4.0.9307 去广告绿化版.
  • 【汇总】虚拟机网络不通(Xshell无法连接虚拟机)排查方法
  • C++开发基础之函数参数传递的几种类型
  • 使用memcache 和 redis 、 实现session 会话复制和保持
  • Tomcat 优化
  • 如何将pdf文件换成3d模型?---模大狮模型网
  • Docker 中快速构建 Redis Cluster 集群
  • C语言----杨辉三角
  • FlaUI
  • MySQL调优-01反范式化表设计
  • 74从零开始学Java之排序算法中的冒泡和选择排序
  • 【Qt问题】VS2019 Qt win32项目如何添加x64编译方式
  • LabVIEW换智能仿真三相电能表研制
  • Python | Leetcode Python题解之第69题x的平方根
  • libhv http client vs cpr
  • CTFHub-Web-文件上传
  • 笔记2:cifar10数据集获取及pytorch批量处理
  • FSD自动驾驶泛谈
  • golang获取变量动态类型