dubbo升级dubbox

笔者公司部分应用用dubbo暴露服务,随着一些新人加盟,很多人推荐用dubbox。dubbo和dubbox的区别,这里不想赘述,网上有很多资料。

dubbox的官方文档,说对dubbo向下兼容。但本人取dubbox的最新jar,暴露服务,然后用dubbo的客户端调用服务,发现并不兼容。发现是服务端受理请求时,在DecodeableRpcInvocation这个类出现异常,异常出线的行数106行
int argNum = in.readInt();

出现异常的原因报文解析decode异常。这个要了解dubbo协议的报文格式。
in 对象执行read操作,会一个一个偏移读取报文,dubbox提供的服务,当执行该行时,认为报文应该是一个整数,但是确是一个String,解析异常。

然后用beyond工具,做了比较下,比较dubbo和dubbox的源代码,发现dubbo协议序列化Hessian2Input这个类并没有发生变化。

于是大胆修改了dubbox的DecodeableRpcInvocation源代码。先判断dubbo协议版本号,注意是协调版本号,而不是服务版本号。
[img]http://dl2.iteye.com/upload/attachment/0121/1340/4be4c00d-ed31-32d7-85d4-f6b50a8b4525.png[/img]
协议版本号是dubbo控制台,上图打勾的那个version.
如果是2.0.0或者2.8.4 按照dubbox进行解析。这个场合,我认为服务是dubbox暴露出的服务。
其他场合按照dubbo的方式进行解析。
然后打成jar包,上传到公司的git和maven库里。后面dubbo升级到dubbox,就不再从官网上下载jar,而是从公司内部的git或者maven库里获取。

这样升级的场合,就不需要dubbo服务的调用方强制升级,因为是去中心化的,还可以用dubbo的客户端jar调用dubbox的服务。

你可能感兴趣的:(java,开源框架)