Open zhangyz-hd opened 3 years ago
可以发现yaml中的key没有实际存在的意义,因为key中的服务信息,在DynamicConfiguration实现,以及ConfigChangeListener中都有,在AbstractConfiguratorListener#genConfiguratorsFromRawRule传入即可。此处key属性可取消。
key是必要的,需要构建完整的override规则。因为配置规则value是个完整yaml, scope=application,应用名字取自key。 scope=service,接口取自key。 因此多个配置,需要增加解析override url做一下key的过滤,目前没有过滤逻辑的。
作为scope: service的配置,写入节点级配置路径也能生效,此处最好能控制监听逻辑。节点级只响应scope:application的yaml,服务级只响应scope:service的yaml,或者也可取消scope属性。
类似前面的回复,同样缺少一层规则是否match过滤。
场景1,节点级配置
向/dubbo/config/dubbo/demo-provider.configurators写入DemoService的动态配置, 正确用法不应该指定service, 应该采用下列用法:
configVersion: v2.7
scope: application
key: appname
configs:
- addresses: ['0.0.0.0:20880']
side: provider
parameters:
weight: 222
Environment
Steps to reproduce this issue
服务提供者端,传统服务发现模式,配置中心使用zookeeper或者apollo,注册2个服务
消费者启动后,会在配置中心监节点级别的动态配置和服务级别的动态配置,以zookeeper为例,会监听:
场景1,节点级配置
向
/dubbo/config/dubbo/demo-provider.configurators
写入DemoService的动态配置根据提供者reExport日志,发现DemoService和GreetingService都按weight=222进行了重新注册。
场景2,服务级配置
向
/dubbo/config/dubbo/org.apache.dubbo.demo.DemoService:1.2.3:G1.configurators
写入DemoService的动态配置根据提供者reExport日志,发现DemoService按weight=333进行了重新注册。
总结