-
Notifications
You must be signed in to change notification settings - Fork 2.2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
动态配置添加导致注册中心provider中出现compatible_config=true,导致新的consumer无法找到provider #392
Comments
@comsince 这个配置是为了在dubbo2.6和dubbo2.7之间做兼容,如果是dubbo 2.6的客户端 应该对这个配置是无感的,能提供下出错的详细场景么? |
前提dubbo 使用的2.7.2 dubbo admin使用的是最新的从develop分支代码中编译出来的,使用zk作为注册中心
初步发现是在OverrideServiceImpl中,如下代码中更新注册中心的provider信息,将COMPATIBLE_CONFIG加入到provider节点信息中 //for 2.6
if (StringUtils.isNotEmpty(update.getService())) {
List<Override> oldOverrides = convertDTOtoOldOverride(old);
List<Override> updatedOverrides = convertDTOtoOldOverride(update);
for (Override o : oldOverrides) {
registry.unregister(o.toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true));
}
for (Override o : updatedOverrides) {
registry.register(o.toUrl().addParameter(Constants.COMPATIBLE_CONFIG, true));
}
} 这样在RegistryDirectory Map<String, List<URL>> categoryUrls = urls.stream()
.filter(Objects::nonNull)
.filter(this::isValidCategory)
.filter(this::isNotCompatibleFor26x)
.collect(Collectors.groupingBy(url -> {
if (UrlUtils.isConfigurator(url)) {
return CONFIGURATORS_CATEGORY;
} else if (UrlUtils.isRoute(url)) {
return ROUTERS_CATEGORY;
} else if (UrlUtils.isProvider(url)) {
return PROVIDERS_CATEGORY;
}
return "";
}));
//这里过滤掉过了COMPATIBLE_CONFIG_KEY 为true的provider url
private boolean isNotCompatibleFor26x(URL url) {
return StringUtils.isEmpty(url.getParameter(Constants.COMPATIBLE_CONFIG_KEY));
} 所以注入上面根据service名称对2.6的兼容导致2.7无法通过注册中心发送provider,不知道这个设计有没有什么问题? |
还有一个问题,新版的configurator转移到/dubbo/config/service/configurator中,在dubbo admin中增加负载均衡配置,其会在上面的节点中增加如下yaml配置 configs:
- addresses:
- ''
enabled: true
parameters:
weight: 100
side: provider
type: weight
- !!org.apache.dubbo.admin.model.adapter.BalancingDTO2OverrideConfigAdapter
enabled: true
parameters:
loadbalance: roundrobin
side: consumer
type: balancing
enabled: false
key: com.comsince.github.PushService
scope: service
org.apache.dubbo.admin.model.adapter.BalancingDTO2OverrideConfigAdapter 这个类在dubbo中是没有的,会报解析错误,难道还要dubbo还要依赖这个dubbo admin这个类库? |
@comsince 第一个不是设计问题,这个参数是为了兼容性设计,逻辑是对的,第二个转成yaml的时候带上类型信息是有问题的,我修改下。 |
联系方式已经发到你的github指定的gmail邮箱; |
@comsince yaml配置的问题已经修复了 |
@comsince compatible_config的问题也已经修复,会在dubbo 2.7.2发布 nzomkxia/incubator-dubbo@d7ceb5e |
使用dubbo admin的修改动态配置,会导致其往注册中心provider节点添加compatible_config=true
参数,导致新的consumer无法找到provider问题
The text was updated successfully, but these errors were encountered: