您现在的位置是:网站首页 > 代码编程 > JAVA开发JAVA开发
【原】记一次dubbo自定义ExceptionFilter踩的坑
不忘初心 2020-05-13 围观() 评论() 点赞() 【JAVA开发】
简介:前面在Dubbo自定义ExceptionFilter实现业务异常透传一文中,提到了一个点,自定义的ExceptionFilter 不是spring的bean,从而需要在 /META-INF/dubbo/com.alibaba.dubbo.rpc.Filter 文件中配置一下,不然在dubbo配置中引入不了,现在回顾一下,还是蛮简单的,并不需要一些复杂繁琐的操作,但是我当时就在这里踩了一个idea工具的大坑,不过归根究底还是自己对工具不熟悉,特写此文来记录一下。
前面在Dubbo自定义ExceptionFilter实现业务异常透传一文中,提到了一个点,自定义的ExceptionFilter 不是spring的bean,从而需要在 /META-INF/dubbo/com.alibaba.dubbo.rpc.Filter 文件中配置一下,不然在dubbo配置中引入不了,现在回顾一下,还是蛮简单的,并不需要一些复杂繁琐的操作,但是我当时就在这里踩了一个idea工具的大坑,不过归根究底还是自己对工具不熟悉,特写此文来记录一下。
在我配置完成filter之后,启动项目立马就报错:
java.lang.IllegalStateException: No such extension org.apache.dubbo.rpc.Filter by name dubboExceptionFilter
at org.apache.dubbo.common.extension.ExtensionLoader.findException(ExtensionLoader.java:584)
at org.apache.dubbo.common.extension.ExtensionLoader.createExtension(ExtensionLoader.java:591)
at org.apache.dubbo.common.extension.ExtensionLoader.getExtension(ExtensionLoader.java:392)
at org.apache.dubbo.common.extension.ExtensionLoader.getActivateExtension(ExtensionLoader.java:267)
at org.apache.dubbo.common.extension.ExtensionLoader.getActivateExtension(ExtensionLoader.java:215)
at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper.buildInvokerChain(ProtocolFilterWrapper.java:54)
at org.apache.dubbo.rpc.protocol.ProtocolFilterWrapper.export(ProtocolFilterWrapper.java:145)
at org.apache.dubbo.qos.protocol.QosProtocolWrapper.export(QosProtocolWrapper.java:66)
at org.apache.dubbo.rpc.Protocol$Adaptive.export(Protocol$Adaptive.java)
at org.apache.dubbo.config.ServiceConfig.exportLocal(ServiceConfig.java:506)
at org.apache.dubbo.config.ServiceConfig.doExportUrlsFor1Protocol(ServiceConfig.java:438)
at org.apache.dubbo.config.ServiceConfig.doExportUrls(ServiceConfig.java:315)
at org.apache.dubbo.config.ServiceConfig.doExport(ServiceConfig.java:287)
at org.apache.dubbo.config.ServiceConfig.export(ServiceConfig.java:205)
at org.apache.dubbo.config.bootstrap.DubboBootstrap.lambda$exportServices$13(DubboBootstrap.java:873)
at java.util.HashMap$Values.forEach(HashMap.java:981)
at org.apache.dubbo.config.bootstrap.DubboBootstrap.exportServices(DubboBootstrap.java:861)
at org.apache.dubbo.config.bootstrap.DubboBootstrap.start(DubboBootstrap.java:703)
at org.apache.dubbo.config.spring.context.DubboBootstrapApplicationListener.onContextRefreshedEvent(DubboBootstrapApplicationListener.java:52)
at org.apache.dubbo.config.spring.context.DubboBootstrapApplicationListener.onApplicationContextEvent(DubboBootstrapApplicationListener.java:45)
at org.apache.dubbo.config.spring.context.OneTimeExecutionApplicationContextEventListener.onApplicationEvent(OneTimeExecutionApplicationContextEventListener.java:40)
at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172)
at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165)
at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:403)
at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:360)
at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:897)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:553)
at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:747)
at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:397)
at org.springframework.boot.SpringApplication.run(SpringApplication.java:315)
at org.springframework.boot.builder.SpringApplicationBuilder.run(SpringApplicationBuilder.java:140)
at com.zhiri.biz.center.application.BizCenterApplication.main(BizCenterApplication.java:17)
错误提示信息很明确,就是找不到我在dubbo中配置的那个filter,但是我都一一检查了,确实没有配置出错的地方,百度了一圈,发现也都是和我一样的配置,并没有什么不一样。
就当我快要放弃,准备使用如何在dubbo中捕获并处理自定义业务异常一文中提到的第二种方法时,我突然注意到我修改了文件之后,target目录中的文件名没有变更过来,所以我就去文件夹中看了一下,竟然发现我的文件夹目录层级不对,瞬间反应过来问题就出在这里了。。。
那为什么我会出现这个低级错误呢?
在idea中,提供了两种文件夹,一种叫package,一种叫directory,这二者有啥区别呢?
别的没有深究,就涉及到我出这个问题的点说一下:
新建package的时候,可以写多级目录命名,a.b.c就会生成a、b、c三个文件夹,而且还是有层级关系的;
新建directory的时候,命名依旧可以随便写,但是,这里不会帮你自动拆分文件夹,也就是说无法生成层级关系;
重点来了
写到这里,可能有人已经反应过来了,没错,问题就出在这里,我在新建 /META-INF/dubbo 目录的时候,new的是directory,但是我在命名上直接写的是META-INF.dubbo,所以最终的文件夹只有一层,导致加载的时候一直找不到文件。。。
再次询问,为什么我要这么写呢?
这个并非是我偷懒和想当然,因为在idea中,它提供了一个合并文件夹展示的功能(很香),可以将空文件夹合并起来展示,这样就不会导致每次找个文件时往下点半天。
如下图:
没成想,就是这个目录展示结构把我给忽悠住了,一开始我压根都没往目录层级上想。。。
看完文章,有任何疑问,请加入群聊一起交流!!!
很赞哦! ()
标签云
猜你喜欢
- IntelliJ IDEA 2019.2已经可以利用补丁永久破解激活了
- IntelliJ IDEA 2019.3利用补丁永久破解激活教程
- IntelliJ IDEA高版本最灵活的永久破解激活方法(含插件激活,时长你说了算)
- Jetbrains全家桶基于ja-netfilter的最新破解激活详细图文教程
- IntelliJ IDEA 2022.1永久破解激活教程(亲测可用,持续更新)
- 分享几个正版 IntelliJ IDEA 激活码(破解码、注册码),亲测可用,持续更新
- ja-netfilter到底需不需要mymap,2021.3.2版本激活失效?
- 如何激活idea2022.1及以上版本中的插件(亲测可用)
- 【史上最全】IntelliJ IDEA最新2022.1版本安装和激活视频教学(含插件)
- IntelliJ IDEA 2022.2 版本最新2099年永久激活方法,亲测可用,也可以开启新UI了。
站点信息
- 网站程序:spring + freemarker
- 主题模板:《今夕何夕》
- 文章统计:篇文章
- 标签管理:标签云
- 微信公众号:扫描二维码,关注我们