Open web1992 opened 1 year ago
我看了这个issues 中 #7890 说明 dubbo 的覆盖规则,但是这个默认的规则 是否需要打开吗?如果打开,给使用者带来了很多的困惑,我感觉不是很值的。
https://github.com/apache/dubbo/pull/11505 应该和这个 PR 相关
目前的设计是 dubbo.reference.*
如 dubbo.reference.timeout
的只会默认覆盖在没有配置timeout
的所有 ReferenceConfig
(如果已经配置的属性会忽略);dubbo.reference.com.interface.DemoService.*
如 dubbo.reference.com.interface.DemoService.timeout
会覆盖 com.interface.DemoService
对应的 ReferenceConfig
的 timeout
(无论是否已经配置)。
实际上,如 PR 里面修复的,目前检查属性是否已经配置的逻辑有问题,导致无法正确判断是否已经配置了,所以出现总是覆盖的问题。
Environment
Steps to reproduce this issue
仓库地址 https://github.com/web1992/demo-dubbo3x-overwrite
dubbo 3.x 中
dubbo.reference.*
,dubbo.service.*
等属性服覆盖导致配置不生效问题复现。启动项目发现consumer中配置的超时时间没有生效!
在 dubbo-consumer.xml 中配置了接口
com.gbdmf.demo.dubbo3.api.GreetingsService
的超时时间6000
ms,但是如果我在 DubboXmlConsumerApplication 文件中设置了System.setProperty("dubbo.reference.timeout", "3000")
系统变量,那么在 xml 中设置的超时时间就会被覆盖了。导致超时时间设置不生效。此问题是在dubbo 3.x 中才出现的问题,这个会导致项目中的接口配置的超时时间都会失效。而且问题很难排查。
此外我用了 nacos 这样的配置中心,如果在 nacos 的配置中心,配置了公共的配置,比如
dubbo.reference.timeout=3000
这个命名规范刚好满足了dubbo 属性的覆盖规则。那么就影响了所有的服务!目前的解决方式展示查找项目中所有这样的配置,改掉。但是成本很大
超时日志