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

news2025/2/26 0:25:06

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

调用大致逻辑:
前端–>服务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.coloradmin.cn/o/1654125.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Springboot 单体thymeleaf极简门户网站

企业门户网站,基于Springboot和layui 1、原介绍 使用技术:后端框架:SpringBoot,Mybatisplus ### 数据库:MySQL,redis ## 前端框架:Layui ## 权限框架:shiro ## 网页模板引擎:thyme…

Python基础详解三

一,函数的多返回值 def methodReturn():return 1,2x,ymethodReturn() print(x,y) 1 2 二,函数的多种参数使用形式 缺省参数: def method7(name,age,address"淄博"):print("name:"name",age"str(age)&quo…

案例分享:BACnet转Modbus提升暖通系统互操作性

现代智能建筑中系统的集成与互操作性是决定其智能化程度的关键因素。随着技术的发展,不同标准下的设备共存成为常态,而BACnet与Modbus作为楼宇自动化领域广泛采用的通讯协议,它们之间的无缝对接显得尤为重要。本文将通过一个实际案例&#xf…

react状态管理之state

第三章 - 状态管理 随着你的应用不断变大,更有意识的去关注应用状态如何组织,以及数据如何在组件之间流动会对你很有帮助。冗余或重复的状态往往是缺陷的根源。在本节中,你将学习如何组织好状态,如何保持状态更新逻辑的可维护性&…

Densenet+SE

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊# 前言 前言 这周开始学习关于经典模型的改进如加注意力机制,这周学习Densenet加通道注意力即SE注意力机制。 ##SE注意力机制简介 SE(…

Flutter笔记:手动配置VSCode中Dart代码自动格式化

Flutter笔记 手动配置VSCode中Dart代码自动格式化 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite:http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:https://blog.csd…

景源畅信电商:抖音小店需要请专业人员装修店铺吗?

在数字营销的海洋中,抖音小店如一艘航船,装修得当才能吸引顾客登船。那么,小店是否需要请专业人员来装修呢?答案是肯定的。 一、视觉冲击力是关键 专业设计师擅长运用色彩、布局与图像创造出强烈的视觉冲击力,这对于抓住用户的注…

亲测快捷高效的编写测试用例方法

前言 测试用例是任何测试周期的第一步,对任何项目都非常重要。如果在此步骤中出现任何问题,则在整个软件测试过程中都会扩大影响。如果测试人员在创建测试用例模板时使用正确的过程和准则,则可以避免这种情况。 在本篇文章中将分享一些简单而…

stack的使用

1.栈的定义 我们可以看到模板参数里面有一个容器适配器 ,什么是适配器?比如充电器就叫做电源适配器,用在做转换,对电压进行相关的转换适配我们的设备。栈,队列不是自己直接管理数据,是让其他容器管理数据&a…

MVC与MVVM架构模式

1、MVC MVC:Model-View-Controller,即模型-视图-控制器 MVC模式是一种非常经典的软件架构模式。从设计模式的角度来看,MVC模式是一种复合模式,它将多个设计模式结合在一种解决方案中,从而可以解决许多设计问题。 MV…

【Linux】线程的内核级理解详谈页表以及虚拟地址到物理地址之间的转化

一、线程的概念 对于进程来说,进程创建时间和空间成本较高,因为进程是承担分配系统资源的基本实体,所以线程的出现就成为了必然。Linux线程与进程非常相似,Linux设计者在设计之初觉得如果再为线程设计数据结构和调度算法就会使整个…

JUC下的ScheduledThreadPoolExecutor详解

ScheduledThreadPoolExecutor是Java并发编程框架中一个强大且灵活的线程池实现,专为定时与周期性任务而设计。作为ThreadPoolExecutor的子类,它不仅继承了线程池管理的高效与灵活性,还内置了基于优先级队列的延迟任务调度机制,支持…

【stm-4】PWM驱动LED呼吸灯 PWM驱动舵机PWM驱动直流电机

1.PWM驱动LED呼吸灯 void TIM_OC1Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); //结构体初始化输出比较单元 void TIM_OC2Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef* TIM_OCInitStruct); void TIM_OC3Init(TIM_TypeDef* TIMx, TIM_OCInitTypeDef*…

智能家居4 -- 添加接收消息的初步处理

这一模块的思路和前面的语言控制模块很相似&#xff0c;差别只是调用TCP 去控制 废话少说&#xff0c;放码过来 增添/修改代码 receive_interface.c #include <pthread.h> #include <mqueue.h> #include <string.h> #include <errno.h> #include <…

算法学习(6)-最短路径

目录 Floyd-Warshall算法 Dijkstra算法 Bellman-Ford算法 Bellman-Ford的队列优化 最短路径算法对比分析 Floyd-Warshall算法 现在回到问题&#xff1a;如何求任意两点之间的最短路径呢&#xff1f; 通过之前的学习&#xff0c; 我们知道通过深度或广度优先搜索可以求出两…

学习记录:AUTOSAR R20-11的阅读记录(五)【CP(5.11-5.19)】完

接上回&#xff1a;学习记录&#xff1a;AUTOSAR R20-11的阅读记录&#xff08;四&#xff09;【CP&#xff08;5.6-5.10&#xff09;】 五、CP 11、General&#xff08;4个&#xff09; 5.11 File Name 说明 1 AUTOSAR_EXP_ LayeredSoftwareArchitecture.pdf 描述了AUTO…

多模态大模型MLLM VIT CLIP BLIP

一、Vit模型介绍 Vit&#xff08;Vision Transformer&#xff09;即将Transformer应用于视觉领域。 Transformer输入输出都是一个序列&#xff0c;若需要应用于视觉领域&#xff0c;则需要考虑如何将一个2d图片转化为一个1d的序列&#xff0c;最直观的想法将图片中的像素点输…

merge函数占用内存过大

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

使用python将`.mat`文件转换成`.xlsx`格式的Excel文件!!

要将.mat文件转换成.xlsx格式的Excel文件 第一步&#xff1a;导入必要的库第二步&#xff1a;定义函数来转换.mat文件第三步&#xff1a;调用函数注意事项 要将.mat文件转换成.xlsx格式的Excel文件&#xff0c;并保持文件名一致&#xff0c;你可以使用scipy.io.loadmat来读取.m…

历代著名画家作品赏析-东晋顾恺之

中国历史朝代顺序为&#xff1a;夏朝、商朝、西周、东周、秦朝、西楚、西汉、新朝、玄汉、东汉、三国、曹魏、蜀汉、孙吴、西晋、东晋、十六国、南朝、刘宋、南齐、南梁、南陈、北朝、北魏、东魏、北齐、西魏、北周、隋&#xff0c;唐宋元明清&#xff0c;近代。 一、东晋著名…