原因
-
今天给公司搭建一个新项目,所以想升级dubbo版本,现在dubbo最新版本是2.7.4.1, 当时想可能不太稳定,所以就往前推一个版本使用了2.7.4。 结果悲剧发生了,下面请看详细分析。
version.png
- dubbo使用zookeeper作为注册中心
dubbo.registry.protocol=zookeeper
,当客户端使用zkclientdubbo.registry.client=zkclient
的时候, 启动服务就出现了空指针异常,感觉这样抛出异常跟突兀。所以就跟了一下源码,看下图发现问题了吗。 ConfigCenterConfig cc = configManager.getConfigCenter().orElse(new ConfigCenterConfig()); 这行代码执行orElse操作的时候并不会初始化new ConfigCenterConfig()
的成员变量private Map<String, String> parameters;
,然后再执行cc.getParameters().put() 操作就出现空指针吗? 所以此处肯定是代码逻辑不够严谨造成的。
dubbo2.7.4.png
3.但是2.7.4.1已经解决了此问题,下图是dubbo2.7.4.1版本的源码。很明显先进行了判断if (cc.getParameters() == null) { cc.setParameters(new HashMap<>()); }
总结
本想着dubbo2.7.4会稳定点,没想到就发现了这个bug,但是dubbo还是在下个小版本把该问题给解决了,但是也给自己一个提示不管做开源还是公司内部系统,都要全面考虑兼容性和有可能出现异常的情况,特别是外部系统调用的时候异常提示是否明确都是要考虑的。
网友评论