[apache/dubbo]2.6.2客户端不能解析3.2.0的response(Unknown result flag, expect '0' '1' '2', get 4)

2023-12-18 760 views
8
My question

搜索了以前的issue,存在过相同的问题,修复方式是在 Version 类中对 release版本号 做兼容,2.6.3 是个分界版本;在 3.2.0 的源码中, protocol版本号 在 [2.0.2, 2.0.99] 范围内,response类型就会赋值为 4 ,而在 2.6.2 之前的客户端只能处理 0、1、2的值,出现异常:Unknown result flag, expect '0' '1' '2', get 4。 如果我要升级服务端,客户端也至少要升级到2.6.3的版本,才可以兼容,但公司内又有基于2.6.2的内部版本,存在升级困难。

Describe the proposal

在我的debug中(客户端2.6.2,server端3.2.0),server端对response encode时,version值是协议版本号 2.0.2 有没有可能:在以后的实现中response的类型基于客户端的版本返回

回答

7

现在 Server 应该会判断 Client 请求的版本号的,如果是低版本的 Client 则不会发送 3 和 4。

5

可以提供一个有问题的 demo 吗,我这边验证是没问题的

3

我还不清楚哪部分代码会拿到client的版本号,假设3.2.0的版本是根据client的版本返回的,那么2.6.2的client版本是release版本,即:2.6.2,而我debug时,3.2.0的server version值是2.0.2

5

这个是没问题的,但是对于 Response 会从 Request 获取

3

response这里就是4了 企业微信截图_16822413076225

然后到client就异常: java.io.IOException: Unknown result flag, expect '0' '1' '2', get 4

2

这个堆栈发一下

从这里: image image

9

都是2.0.2: 企业微信截图_16824077774152

企业微信截图_16824010829593

6

那确定 60650 这个端口对应的进程 Dubbo 版本是 2.6.2?

3

确定是的,两个截图端口不一样是分了两次请求debug的。重测同样: 企业微信截图_16824087461251

企业微信截图_16824087814053