最近在公司接到了一个给项目整合dubbo的任务,由于自己之前没学过dubbo,同时开发经验也不足,整整弄了两天才算是弄好,写篇文章记录一下这个过程。
1.按照公司的dubbo+nacos+springboot整合文档给项目加上了相关maven依赖,启动报错,原因是依赖有冲突,通过报错信息找到了冲突的依赖,去掉之后就不报这个错了。
2.启动项目之后,可以看到控制台把该连的连上,该初始化的初始化之后,又一点点地把它们关上了,控制台最后面的报错信息就是closing xxx, xxx shutdown。一开始只关注了这几个“关闭”的提示,没有往上翻日志,导致错过了关键报错信息。这些东西关闭的原因是“xxxFilter没有初始化成功”。在往上搜索后加入新建一下相关Filter类,并在META-INF中新建一个文件配置一下就解决了。
3.解决完上面两个问题之后项目能够启动成功,并且在nacos上能够看到注册的服务了,新建了一个服务消费者的项目,利用@DubboReference去从nacos获取到注册的服务,发现会报“no provider for xx”的错。看了一下报错信息,将两个项目的文件结构改成一样的后,这个错解决了。
4.至此,一个加入dubbo的基本流程就结束了。但是别人开发的系统不可能和你的系统文件结构一样啊,这怎么解决。通过蛛丝马迹发现,其他系统对外提供的API是有打成jar包发布到公司的仓库的。在pom中引入这个依赖就能达到这个目的。
5.最后一个难题来了。在nacos平台上看到每个系统只有自己的一些关键模块的服务提供者,而不是每个service实现类都有服务提供者实例。后来偶然间看到了Dubbo3.x版本提供了应用级注册,之前我用的都是接口级注册,所以用@DubboService修饰的服务实现类都出现在了nacos平台上。在yaml文件中配置dubbo.application.registry-mode = instance之后,用@DubboService修饰的实现类就不会出现在nacos上了,但是消费者是可以正常访问到的。
思考
还是需要学习一下各种技术的基础知识的,拿来就用会在很基础的地方卡住。通过看视频/看科普博文学习技术的基础知识,增加广度;通过时间增加深度。