dubbo 异常处理方式,dubbo自定义异常无法传递
00-1010序操作步骤1。创建一个处理异常的公共项目2。转换生产端3的配置文件。测试消耗侧1的配置。启动本地zk服务2。启动生产端服务3。启动消费端服务来模拟服务调用。使用场景描述摘要。
00-1010在很多公司中,使用dubbo进行微服务治理也是非常常见的方式。简单来说,服务提供方向注册中心注册并发布服务,消费者订阅服务,然后调用本地接口;
但是,在实际操作中,经常会出现这样的场景,即服务消费者调用服务生产者的服务接口时,一旦服务提供者的接口抛出异常,如果消费者不使用try-catch来捕捉,那么对于故障排除和故障分析来说将是一件很头疼的事情。
对于消费者来说,不可能在所有调用dubbo接口的地方都用try-catch包装吧?难道没有统一处理这种服务接口调用异常的方法吗?答案是肯定的,可以使用dubbo自定义过滤器,通过过滤器拦截调用异常问题;
目录
前言
ComnonFilter类,只需要实现dubbo提供的过滤器接口。
包com . cong ge . filter;导入cn . Hu tool . core . date . dateutil;导入com . Alibaba . fast JSON . JSON;导入org . Apache . dubbo.common . constants;导入org . Apache . dubbo.common . extension . activate;导入org . Apache . dubbo . RPC . *;导入org . Apache . dubbo . RPC . service . generic service;导入Java . util . date;@Activate(group={Constants。提供程序,常量。CONSUMER})公共类CommonFilter实现Filter { @ Override public Result invoke(Invoker?invoker,Invocation invocation)抛出RPC exception { Result Result=null;try { result=invoker.invoke(调用);if(result . has exception()generic service . class!=invoker . get interface()){ Throwable exception=result . get exception();string data=string . format( r n[level]: error,[createTime]:%s,[serviceName]:%s,[methodName]:%s,[inputParam]:%s ,dateutil . format datetime(new Date()),invoker.getInterface()。getName()、invocation.getMethodName()、JSON . tojsonstring(invocation . get arguments());System.out.println(数据);System.out.println(异常);} } catch(runtime exception e){ String data=String . format( r n[level]: error,"[createTime]:%s,"[serviceName]:%s,"[methodName]:%s,"[inputParam]:%s ,dateutil . format datetime(new Date()),invoker.getInterface()。getName()、invocation.getMethodName()、JSON . tojsonstring(invocation . get arguments());System.out.println(数据);system . out . println(e);}返回结果;}}在resources目录下创建相关目录。注意,文件路径和文件名是固定的,文件内容如下
00-1010 1.在pom中导入上面公开依赖的maven工程坐标,然后在配置文件中配置过滤器的名称。
2.手动为生产方提供的服务添加一个例外。
00-1010消费者暂时不需要做其他配置。
导入com . cong ge . service . hello service;导入org . spring framework . context . application context;import org . spring framework . context . support . classpathmlaplicationcontext;导入Java . io . io exception;公共类consumer main { public static void main(String[]args)引发异常{ application context AC=new classpathmlaplicationcontext( spring-consumer . XML );hello service service=(hello service)AC . get bean( hello service );string Hello=service . Hello( Hello Provider );system . out . println(hello);}}
操作步骤
一、创建一个公共的用于处理异常的工程
二、生产端配置文件改造
00-1010消费者报告的异常信息
由于我们已经在生产端配置了过滤器,所以当我们在生产端查看控制台时,我们可以看到调用异常的信息也被输出。
00-1010一般来说,当微服务的调用链路较长时,在消费端以上述方式配置微服务是有意义的,可以快速定位被调用的服务接口和抛出问题的具体原因,方便服务提供者快速定位和修复问题。
00-1010关于dubbo自定义异常的这篇文章到此为止。有关dubbo自定义异常的更多信息,请搜索以前关于popular IT的文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。