Dubbo本地服务暴露的一些坑
本地暴露
- Dubbo本地服务暴露,实在暴露远程服务之前会进行本地服务暴露,避免provider和consumer在同一容器内,进行不必要的网络开销,即本地调用对应protocol为injvm
- 而在Dubbo的服务暴露中,应该默认是无论什么场景,都应该进行本地服务的暴露,但是实际情况却并不是这样,参照该issueinjvm and local call,本篇也主要对该issue的问题
ServiceConfig中exportLocal的问题

- 如图,可以看到框中红线代码对我们配置中的协议做了判断,如果不是injvm协议,则构建一个injvm的的URL进行本地服务的暴露,那么问题来了,如果我们指定了injvm协议的话,这块将不会执行,那也就无法进行本地服务的暴露了,当然我们一般不会使用injvm协议进行本地调用,所以从dubbo开源到现在,这个问题也就没有被大家所发现,去掉这个判断逻辑便解决问题
- 这块代码曾经在学习服务暴露的时候有过疑问,但是没有过于深究,直到看到这个issue的时候才恍然大悟,其实也反映出自己在学习框架源码过程中,对于一些细节有疑问但是却有惯性思维,觉得那么多人都看过这里,是自己理解错了吧的想法没有去仔细思考,学习还是需要带着自己的思想抱着一股打破砂锅问到底的劲才行
ServiceConfig中doExportUrls的问题

- 如图,可以看到在往注册中心注册服务的时候,新增了如果是injvm协议,则跳出循环的判断,因为dubbo支持多注册中心,所以该判断不能再服务注册前过滤,在历史版本中,如果采用injvm协议,也会使该协议注册到registry上,这个显然是没有必要的
总结
- 这两个问题都是很细微的问题,但是也反应出我们在平时编码中对细节的把控,已经对问题考虑的全面性,在学习的时候也同样要把控细节,不是说看看别人博客怎么写,自己就怎么想,源码学习应该有自己的思索
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Maple!