系统解耦问题-不同系统间dubbo调用的异常处理-ExceptionFilter
2017-06-20 16:41
435 查看
本文主要参考:浅谈dubbo的ExceptionFilter异常处理
问题描述,系统A和系统B使用了dubbo进行不同系统之间的调用,而B是从A解耦出的系统,所以B的自定义异常和A需要对接,我们一开始只是简单的迁移了异常类过来,实际使用的时候由于包名不同导致A抛出的异常和B签名不一致,这时dubbo会直接抛出异常。
解决思路:既然是dubbo传递的时候出现的问题,最佳方案还是在dubbo的异常处理机制上改动。如果捕获到异常来着A包目录,这转换成B包对应的异常类。
改动,参考 浅谈dubbo的ExceptionFilter异常处理
从dubbo的ExceptionFilter下手
核心部分
问题描述,系统A和系统B使用了dubbo进行不同系统之间的调用,而B是从A解耦出的系统,所以B的自定义异常和A需要对接,我们一开始只是简单的迁移了异常类过来,实际使用的时候由于包名不同导致A抛出的异常和B签名不一致,这时dubbo会直接抛出异常。
解决思路:既然是dubbo传递的时候出现的问题,最佳方案还是在dubbo的异常处理机制上改动。如果捕获到异常来着A包目录,这转换成B包对应的异常类。
改动,参考 浅谈dubbo的ExceptionFilter异常处理
从dubbo的ExceptionFilter下手
public class ExceptionFilter implements Filter { @Override public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException { try { Result result = invoker.invoke(invocation); if (result.hasException() && GenericService.class != invoker.getInterface()) { try { Throwable exception = result.getException(); if(exception instanceof b.exception.abException) { b.exception.abException ex = (b.exception.abException)exception; a.exception.XedkException nex = new a.exception.abException(ex.getCode(),ex.getMessage()); nex.setStackTrace(ex.getStackTrace()); return new RpcResult(nex); // 否则,包装成RuntimeException抛给客户端 return new RpcResult(new RuntimeException(StringUtils.toString(exception))); } catch (Throwable e) { return result; } } return result; } catch (RuntimeException e) { logger.error("Got unchecked and undeclared exception which called by " + RpcContext.getContext().getRemoteHost() + ". service: " + invoker.getInterface().getName() + ", method: " + invocation.getMethodName() + ", exception: " + e.getClass().getName() + ": " + e.getMessage(), e); throw e; } } }
核心部分
if(exception instanceof b.exception.abException) { b.exception.abException ex = (b.exception.abException)exception; a.exception.XedkException nex = new a.exception.abException(ex.getCode(),ex.getMessage()); nex.setStackTrace(ex.getStackTrace()); return new RpcResult(nex); }
相关文章推荐
- android调用系统相机和相册进行拍照裁剪处理,解决不同安卓版本存在无法加载相册的问题,处理了是否有sd卡的存在的情况
- Android笔记五.Intent异常处理及常用系统调用
- 碰到bind错误,主程序异常,调用处理函数退出问题
- 解决Android7.0系统 调用系统相机、系统播放器播放视频、切图兼容问题,报异常android.os.FileUriExposedException
- java应用中,调用第三方api如何处理异常(系统异常、操作异常等等)
- 不同系统下不同jre使用GBK处理特殊汉字的差异引发乱码问题
- 在与sap系统集成时遇到的问题.sap系统发布一webservice,java(xfire)作为客户端调用,调用时抛出如下异常: Wrong Content-Type and empty HTTP-Body received: ("HTTP Code 20
- dubbo处理调用请求涉及缓存问题
- MIPS中的异常处理和系统调用【转】
- Asp.Net : 捕捉和记录网站中出现的所有未处理错误,抛出详细的页面来源和访问ip,调用的接口方法及异常实例(记事本日志,系统日志及数据库日志)
- MIPS中的异常处理和系统调用
- 通达OA 一次系统异常问题处理
- Android:处理调用系统相机照片被压缩问题
- 解决Android7.0系统 调用系统相机、系统播放器播放视频、切图兼容问题,报异常android.os.FileUriExposedException
- Android:处理调用系统相机照片被压缩问题
- centos 6.5 系统中jboss4.2.3启动过程异常缓慢的问题处理一则
- PLSQL存储过程调用存储过程对异常的处理问题
- dubbo处理自定义异常问题
- Android:处理调用系统相机照片被压缩问题,图片内容看不清的问题
- 通达OA 一次系统异常问题处理