✅ 验证清单
🚀 Go 版本
1.24.0
📦 Dubbo-go 版本
v3.3.2
🖥️ 服务端配置
dubbo-go, v3.3.2
💻 客户端配置
dubbo-go, v3.3.2
🌐 协议配置
Triple
📋 注册中心配置
Nacos v2.4.3
💾 操作系统
🍎 macOS
📝 Bug 描述
目前revision计算代码:
func resolveRevision(urls []*common.URL) string {
if len(urls) == 0 {
return "0"
}
candidates := make([]string, 0, len(urls))
for _, u := range urls {
sk := u.GetParam(constant.InterfaceKey, "")
if len(u.Methods) == 0 {
candidates = append(candidates, sk)
} else {
for _, m := range u.Methods {
// methods are part of candidates
candidates = append(candidates, sk+constant.KeySeparator+m)
}
}
// append url params if we need it
}
sort.Strings(candidates)
// it's nearly impossible to be overflow
res := uint64(0)
for _, c := range candidates {
res += uint64(crc32.ChecksumIEEE([]byte(c)))
}
return fmt.Sprint(res)
}
该代码仅会计算方法名称,忽略了version等的计算,导致开启两个不同版本的示例会导致冲突。
该方法注释上说dubbo-java忽略了params,实际并未忽略。(dubbo-java的revision计算方式更新过)
🔄 重现步骤
为两个provider的方法设置不同版本,会产生覆盖。
✅ 预期行为
不同版本的方法应该正确隔离。
❌ 实际行为
当两个provider提供的方法版本不一致的时候,会导致冲突。
💡 可能的解决方案
计算revision的时候参考dubbo-java的代码
✅ 验证清单
🚀 Go 版本
1.24.0
📦 Dubbo-go 版本
v3.3.2
🖥️ 服务端配置
dubbo-go, v3.3.2
💻 客户端配置
dubbo-go, v3.3.2
🌐 协议配置
Triple
📋 注册中心配置
Nacos v2.4.3
💾 操作系统
🍎 macOS
📝 Bug 描述
目前revision计算代码:
该代码仅会计算方法名称,忽略了version等的计算,导致开启两个不同版本的示例会导致冲突。
该方法注释上说dubbo-java忽略了params,实际并未忽略。(dubbo-java的revision计算方式更新过)
🔄 重现步骤
为两个provider的方法设置不同版本,会产生覆盖。
✅ 预期行为
不同版本的方法应该正确隔离。
❌ 实际行为
当两个provider提供的方法版本不一致的时候,会导致冲突。
💡 可能的解决方案
计算revision的时候参考dubbo-java的代码