首页 > 其他分享 >dubbo 统一异常处理

dubbo 统一异常处理

时间:2024-04-03 23:55:40浏览次数:15  
标签:businessException dubbo proceedingJoinPoint result signature 异常 public 统一

依赖包 pom.xml

如下:

<dependency>
    <groupId>org.apache.dubbo</groupId>
    <artifactId>dubbo-registry-nacos</artifactId>
    <version>3.0.4</version>
</dependency>

dubbo 服务:

示例:

@DubboService(interfaceClass = PersonService.class, group = "HSF", version = "2.0.0")
@Component
public class PersonServiceImpl implements PersonService {


}

dubbo 统一异常处理

指定切入点,进行环绕通知。如果有异常,就捕获后处理。

@Aspect
@Component
@Slf4j
public class DubboExceptionAop {

    /**
     * 定义切入点。 指定dubbo service的注解。
     * 如果是旧版本,使用
     * @Pointcut("@within(org.apache.dubbo.config.annotation.Service)")
     *
     */
    @Pointcut("@within(org.apache.dubbo.config.annotation.DubboService)")
    public void dubboException() {

    }

    /**
     * 环绕通知
     *
     */
    @Around(value = "dubboException()")
    public Object handlerException(ProceedingJoinPoint proceedingJoinPoint) {
        Object result = null;
        Long time = System.currentTimeMillis();
        Signature signature = proceedingJoinPoint.getSignature();
        String params = JSON.toJSONString(proceedingJoinPoint.getArgs());
        try {
            result = proceedingJoinPoint.proceed();
        } catch (BusinessException businessException) {
        	//业务异常
            log.error("{} dubbo businessException:{},param:{}", signature.getName(), businessException.getMessage(), params,businessException);
            result = new Response<>(Response.Status.FAILED.getCode(), businessException.getMessage());
        } catch (Throwable throwable) {
            log.error("{} dubbo exception:{},param:{}", signature.getName(), params,throwable);
            result = new Response<>(Response.Status.FAILED.getCode(), "失败");
        } finally {
            Long cost = System.currentTimeMillis() - time;
			//统计耗时
            log.info("{} biz over,it takes time:{}", signature.getName(), cost);
        }
        return result;
    }


}



标签:businessException,dubbo,proceedingJoinPoint,result,signature,异常,public,统一
From: https://www.cnblogs.com/expiator/p/18113734

相关文章

  • 记一次nginx服务异常-无法访问问题排查
    上一秒还好好地,突然下一秒nginx服务器就访问不了啦。这让人很是疑惑,到底是什么原因导致的呢?问题如下  开始一步一步地排查问题。尝试一:在windows电脑上使用telnet命令查看端口是否正常联通。测试结果发现可以正确联通。  说明端口是打开的,并且可以正确联通。 ......
  • VUE-axios统一增加请求头并根据接口返回的状态码判断用户登录状态并跳转登录页
    背景:后台接口返回code==501表示用户是未登录状态,需要登录才可访问;main.js中通过http拦截做路由跳转importVuefrom‘vue’importAxiosfrom‘axios’Vue.prototype.$axios=Axiosimport{Loading,Message,MessageBox}from‘element-ui’//超时时间Axios.......
  • 面向量产的多传感器标定,统一传感器「世界观」
    智能驾驶系统主要通过多个传感器来实现对真实世界的感知。而传感器的标定也决定了感知能力上限:传感器数据的坐标(图像、点云等)与真实世界物体的坐标存在对应的转换关系,对于坐标转换模型公式中的传感器参数调整,就是标定。传感器标定主要分为内参标定和外参标定。内参标定的目的......
  • 代码随想录算法训练营第14天 | 二叉树 | 二叉树的遍历 | 迭代遍历 |统一风格的迭代(待
    理论基础二叉树的存储方式:可以链式也可以顺序用数组顺序存储二叉树的遍历递归遍历递归算法三要素确定递归函数的参数和返回值确定终止条件确定单层递归的逻辑风格不统一的迭代遍历(前后和中序的不同)前序遍历(根左右)//递归版voidtraversal(TreeNode*......
  • 代码随想录算法训练营DAY14|C++二叉树Part.1|二叉树的递归遍历、二叉树的迭代遍历、二
    文章目录二叉树的递归遍历思路CPP代码二叉树的迭代遍历思路前序遍历后序遍历后序遍历二叉树的统一迭代法二叉树的递归遍历144.二叉树的前序遍历、145.二叉树的后序遍历、94.二叉树的中序遍历文章讲解:二叉树的递归遍历视频讲解:每次写递归都要靠直觉?这次带你学......
  • 14天【代码随想录算法训练营34期】 第六章 二叉树part01(● 理论基础 ● 递归遍历 ●
    理论基础种类满二叉树:k是深度,node数为2^k-1完全二叉树:二叉树底部是从左向右持续的二叉搜索树:左边节点都小于中间节点,右边节点都大于中间节点平衡二叉树AVL:左边和右边高度相差不超过1存储方式链式存储:leftchildptr,rightchildptr线式存储:字符数组保存,2i+1是左孩......
  • .net core webapi统一修改日期时间的返回格式
    在写WebApi时,我们的日期时间往往是DateTime类型,如果直接返回,前端拿到的结果有可能会是这种格式:下面是如何将返回的DateTime字段统一改成自定义的格式首先创建一个自定义的JSON序列化器,定义一个继承System.Text.Json.Serialization.JsonConverter的类,实现Read和Write两个抽象方......
  • C# .NET6 WebAPI 全局异常过滤器
    自定义返回级别namespaceDemo{///<summary>///自定义返回级别///</summary>publicenumResultLevel:int{///<summary>///正确///</summary>OK=0,///<summary>......
  • 如何建立统一的机台数据传输管控通道,发挥数据的价值?
    机台数据传输通常指的是在工业自动化和制造过程中,将机器设备(机台)产生的数据通过网络或其他通信手段传输到监控系统、数据库或远程控制中心的过程。这一过程对于实现智能制造、提高生产效率和质量控制至关重要。比如传统制造业,在⽣产经营中,机台会产⽣庞⼤⽽属性不同的数据,企业需要......
  • Day28 异常
    Day28异常一、概念异常是程序在运行期发生的不正常的事件,它会打断指令的正常执行流程。设计良好的程序应该在异常发生时提供处理这些不正常事件的方法,使程序不会因为异常的发生而阻断或产生不可预见的结果。注意:Java语言使用异常处理机制为程序提供了异常处理的能力。......