[优化] Disconf 与 Dubbo client多网卡IP配置补丁

问题场景:

Disconf集中统一化了各节点的配置文件,这个不错!但在某些复杂场景下,比如你上了dubbo而某些服务器是多网卡的(dubbo说 “遍历本地网卡,返回第一个合理的IP。”),集中统一又变得不适用了。


解决办法:

修改 com/baidu/disconf/web/web/config/controller/ConfigFetcherController.java,  File配置类型增加如下两个魔术变量:

${ClientIP} : 可获取client远程的ip ,替换为 192.168.2.100
${ClientID} : 可根据client远程IP,配置id 为 id_192_168_2_100

[优化] Disconf 与 Dubbo client多网卡IP配置补丁_第1张图片

“实例列表”红色“出现错误”提示就是我们想要的差异配置结果。

贴码:

public HttpEntity<byte[]> getFile(HttpServletRequest request,ConfForm confForm) {

        boolean hasError = false;
        
        String ip = getRemoteAddress(request);
        String id ="id_"+ ip.replace(".", "_");
        //
        // 校验
        //
        ConfigFullModel configModel = null;
        try {
            configModel = configValidator4Fetch.verifyConfForm(confForm);
        } catch (Exception e) {
            LOG.error(e.toString());
            hasError = true;
        }

        if (hasError == false) {
            try {
                //
                Config config = configFetchMgr
                        .getConfByParameter(configModel.getApp().getId(), configModel.getEnv().getId(),
                                configModel.getVersion(), configModel.getKey(),
                                DisConfigTypeEnum.FILE);
                if (config == null) {
                    hasError = true;
                    throw new DocumentNotFoundException(configModel.getKey());
                }

                return downloadDspBill(configModel.getKey(), config.getValue().replace("${ClientIP}", ip).replace("${ClientID}", id));

            } catch (Exception e) {
                LOG.error(e.toString());
            }
        }

        if (confForm.getKey() != null) {
            throw new DocumentNotFoundException(confForm.getKey());
        } else {
            throw new DocumentNotFoundException("");
        }
    }



你可能感兴趣的:(DUBBO,多网卡,多ip,disconf)