You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@dubbo.apache.org by al...@apache.org on 2021/06/27 04:24:10 UTC
[dubbo-go] branch 3.0 updated: config center for more parameters
(#1277)
This is an automated email from the ASF dual-hosted git repository.
alexstocks pushed a commit to branch 3.0
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git
The following commit(s) were added to refs/heads/3.0 by this push:
new 3596e59 config center for more parameters (#1277)
3596e59 is described below
commit 3596e59771fb916ff682dc352a7fdefc0e192284
Author: 赵云兴 <23...@qq.com>
AuthorDate: Sun Jun 27 12:24:05 2021 +0800
config center for more parameters (#1277)
* nacos config center optimize
* up remote config
* add protocol chick
* up:代码优化
* go fmt
---
common/constant/key.go | 23 +++++++++----
config/config_center_config.go | 64 +++++++++++++++++++---------------
config/config_center_config_test.go | 22 +-----------
config/remote_config.go | 23 +++++++++++--
config_center/apollo/impl_test.go | 2 +-
config_center/nacos/client.go | 45 ++----------------------
config_center/nacos/client_test.go | 6 ++--
config_center/nacos/impl.go | 2 +-
registry/nacos/service_discovery.go | 11 +++---
remoting/nacos/builder.go | 68 +++++++++++++------------------------
remoting/nacos/builder_test.go | 2 ++
11 files changed, 114 insertions(+), 154 deletions(-)
diff --git a/common/constant/key.go b/common/constant/key.go
index a57a90c..601a5dd 100644
--- a/common/constant/key.go
+++ b/common/constant/key.go
@@ -136,13 +136,14 @@ const (
)
const (
- CONFIG_NAMESPACE_KEY = "config.namespace"
- CONFIG_GROUP_KEY = "config.group"
- CONFIG_APP_ID_KEY = "config.appId"
- CONFIG_CLUSTER_KEY = "config.cluster"
- CONFIG_CHECK_KEY = "config.check"
- CONFIG_TIMEOUT_KET = "config.timeout"
- CONFIG_LOG_DIR_KEY = "config.logDir"
+ CONFIG_NAMESPACE_KEY = "namespace"
+ CONFIG_GROUP_KEY = "group"
+ CONFIG_APP_ID_KEY = "appId"
+ CONFIG_CLUSTER_KEY = "cluster"
+ CONFIG_TIMEOUT_KEY = "timeout"
+ CONFIG_USERNAME_KEY = "username"
+ CONFIG_PASSWORD_KEY = "password"
+ CONFIG_LOG_DIR_KEY = "logDir"
CONFIG_VERSION_KEY = "configVersion"
COMPATIBLE_CONFIG_KEY = "compatible_config"
)
@@ -172,6 +173,7 @@ const (
NACOS_DEFAULT_ROLETYPE = 3
NACOS_CACHE_DIR_KEY = "cacheDir"
NACOS_LOG_DIR_KEY = "logDir"
+ NACOS_BEAT_INTERVAL_KEY = "beatInterval"
NACOS_ENDPOINT = "endpoint"
NACOS_SERVICE_NAME_SEPARATOR = ":"
NACOS_CATEGORY_KEY = "category"
@@ -181,6 +183,13 @@ const (
NACOS_PASSWORD = "password"
NACOS_USERNAME = "username"
NACOS_NOT_LOAD_LOCAL_CACHE = "nacos.not.load.cache"
+ NACOS_APP_NAME_KEY = "appName"
+ NACOS_REGION_ID_KEY = "regionId"
+ NACOS_ACCESS_KEY = "access"
+ NACOS_SECRET_KEY = "secret"
+ NACOS_OPEN_KMS_KEY = "kms"
+ NACOS_UPDATE_THREAD_NUM_KEY = "updateThreadNum"
+ NACOS_LOG_LEVEL_KEY = "logLevel"
)
const (
diff --git a/config/config_center_config.go b/config/config_center_config.go
index 415eadc..360818c 100644
--- a/config/config_center_config.go
+++ b/config/config_center_config.go
@@ -44,19 +44,20 @@ import (
//
// ConfigCenter has currently supported Zookeeper, Nacos, Etcd, Consul, Apollo
type ConfigCenterConfig struct {
- Protocol string `required:"true" yaml:"protocol" json:"protocol,omitempty"`
- Address string `yaml:"address" json:"address,omitempty"`
- Cluster string `yaml:"cluster" json:"cluster,omitempty"`
- Group string `default:"dubbo" yaml:"group" json:"group,omitempty"`
- Username string `yaml:"username" json:"username,omitempty"`
- Password string `yaml:"password" json:"password,omitempty"`
- LogDir string `yaml:"log_dir" json:"log_dir,omitempty"`
- ConfigFile string `default:"dubbo.properties" yaml:"config_file" json:"config_file,omitempty"`
- Namespace string `default:"dubbo" yaml:"namespace" json:"namespace,omitempty"`
- AppConfigFile string `default:"dubbo.properties" yaml:"app_config_file" json:"app_config_file,omitempty"`
- AppId string `default:"dubbo" yaml:"app_id" json:"app_id,omitempty"`
- TimeoutStr string `yaml:"timeout" json:"timeout,omitempty"`
- RemoteRef string `required:"false" yaml:"remote_ref" json:"remote_ref,omitempty"`
+ Protocol string `required:"true" yaml:"protocol" json:"protocol,omitempty"`
+ Address string `yaml:"address" json:"address,omitempty"`
+ Cluster string `yaml:"cluster" json:"cluster,omitempty"`
+ Group string `default:"dubbo" yaml:"group" json:"group,omitempty"`
+ Username string `yaml:"username" json:"username,omitempty"`
+ Password string `yaml:"password" json:"password,omitempty"`
+ LogDir string `yaml:"log_dir" json:"log_dir,omitempty"`
+ ConfigFile string `default:"dubbo.properties" yaml:"config_file" json:"config_file,omitempty"`
+ Namespace string `default:"dubbo" yaml:"namespace" json:"namespace,omitempty"`
+ AppConfigFile string `default:"dubbo.properties" yaml:"app_config_file" json:"app_config_file,omitempty"`
+ AppID string `default:"dubbo" yaml:"app_id" json:"app_id,omitempty"`
+ TimeoutStr string `yaml:"timeout" json:"timeout,omitempty"`
+ RemoteRef string `required:"false" yaml:"remote_ref" json:"remote_ref,omitempty"`
+ Params map[string]string `yaml:"params" json:"parameters,omitempty"`
}
// UnmarshalYAML unmarshals the ConfigCenterConfig by @unmarshal function
@@ -74,8 +75,15 @@ func (c *ConfigCenterConfig) GetUrlMap() url.Values {
urlMap.Set(constant.CONFIG_NAMESPACE_KEY, c.Namespace)
urlMap.Set(constant.CONFIG_GROUP_KEY, c.Group)
urlMap.Set(constant.CONFIG_CLUSTER_KEY, c.Cluster)
- urlMap.Set(constant.CONFIG_APP_ID_KEY, c.AppId)
+ urlMap.Set(constant.CONFIG_APP_ID_KEY, c.AppID)
urlMap.Set(constant.CONFIG_LOG_DIR_KEY, c.LogDir)
+ urlMap.Set(constant.CONFIG_USERNAME_KEY, c.Username)
+ urlMap.Set(constant.CONFIG_PASSWORD_KEY, c.Password)
+ urlMap.Set(constant.CONFIG_TIMEOUT_KEY, c.TimeoutStr)
+
+ for key, val := range c.Params {
+ urlMap.Set(key, val)
+ }
return urlMap
}
@@ -84,22 +92,22 @@ type configCenter struct{}
// toURL will compatible with baseConfig.ConfigCenterConfig.Address and baseConfig.ConfigCenterConfig.RemoteRef before 1.6.0
// After 1.6.0 will not compatible, only baseConfig.ConfigCenterConfig.RemoteRef
func (b *configCenter) toURL(baseConfig BaseConfig) (*common.URL, error) {
- if len(baseConfig.ConfigCenterConfig.Address) > 0 {
+ remoteRef := baseConfig.ConfigCenterConfig.RemoteRef
+ // if set remote ref use remote
+ if len(remoteRef) <= 0 {
return common.NewURL(baseConfig.ConfigCenterConfig.Address,
- common.WithProtocol(baseConfig.ConfigCenterConfig.Protocol), common.WithParams(baseConfig.ConfigCenterConfig.GetUrlMap()))
+ common.WithProtocol(baseConfig.ConfigCenterConfig.Protocol),
+ common.WithParams(baseConfig.ConfigCenterConfig.GetUrlMap()))
}
-
- remoteRef := baseConfig.ConfigCenterConfig.RemoteRef
rc, ok := baseConfig.GetRemoteConfig(remoteRef)
-
if !ok {
return nil, perrors.New("Could not find out the remote ref config, name: " + remoteRef)
}
-
- newURL, err := rc.toURL()
- if err == nil {
- newURL.SetParams(baseConfig.ConfigCenterConfig.GetUrlMap())
+ // set protocol if remote not set
+ if len(rc.Protocol) <= 0 {
+ rc.Protocol = baseConfig.ConfigCenterConfig.Protocol
}
+ newURL, err := rc.ToURL()
return newURL, err
}
@@ -124,8 +132,10 @@ func (b *configCenter) prepareEnvironment(baseConfig BaseConfig, configCenterUrl
logger.Errorf("Get dynamic configuration error , error message is %v", err)
return perrors.WithStack(err)
}
- config.GetEnvInstance().SetDynamicConfiguration(dynamicConfig)
- content, err := dynamicConfig.GetProperties(baseConfig.ConfigCenterConfig.ConfigFile, config_center.WithGroup(baseConfig.ConfigCenterConfig.Group))
+ envInstance := config.GetEnvInstance()
+ envInstance.SetDynamicConfiguration(dynamicConfig)
+ content, err := dynamicConfig.GetProperties(baseConfig.ConfigCenterConfig.ConfigFile,
+ config_center.WithGroup(baseConfig.ConfigCenterConfig.Group))
if err != nil {
logger.Errorf("Get config content in dynamic configuration error , error message is %v", err)
return perrors.WithStack(err)
@@ -155,7 +165,7 @@ func (b *configCenter) prepareEnvironment(baseConfig BaseConfig, configCenterUrl
if err != nil {
return perrors.WithStack(err)
}
- config.GetEnvInstance().UpdateExternalConfigMap(mapContent)
+ envInstance.UpdateExternalConfigMap(mapContent)
// appGroup config file
if len(appContent) != 0 {
@@ -163,7 +173,7 @@ func (b *configCenter) prepareEnvironment(baseConfig BaseConfig, configCenterUrl
if err != nil {
return perrors.WithStack(err)
}
- config.GetEnvInstance().UpdateAppExternalConfigMap(appMapContent)
+ envInstance.UpdateAppExternalConfigMap(appMapContent)
}
return nil
diff --git a/config/config_center_config_test.go b/config/config_center_config_test.go
index f0ff05e..ec11947 100644
--- a/config/config_center_config_test.go
+++ b/config/config_center_config_test.go
@@ -59,6 +59,7 @@ func TestStartConfigCenterWithRemoteRef(t *testing.T) {
baseConfig := &BaseConfig{
Remotes: m,
ConfigCenterConfig: &ConfigCenterConfig{
+ Protocol: "mock",
Group: "dubbo",
RemoteRef: "mock",
ConfigFile: "mockDubbo.properties",
@@ -72,24 +73,3 @@ func TestStartConfigCenterWithRemoteRef(t *testing.T) {
assert.True(t, b)
assert.Equal(t, "ikurento.com", v)
}
-
-func TestStartConfigCenterWithRemoteRefError(t *testing.T) {
- extension.SetConfigCenterFactory("mock", func() config_center.DynamicConfigurationFactory {
- return &config_center.MockDynamicConfigurationFactory{}
- })
- m := make(map[string]*RemoteConfig)
- m["mock"] = &RemoteConfig{Address: "172.0.0.1"}
- baseConfig := &BaseConfig{
- Remotes: m,
- ConfigCenterConfig: &ConfigCenterConfig{
- Protocol: "mock",
- Group: "dubbo",
- RemoteRef: "mock",
- ConfigFile: "mockDubbo.properties",
- },
- }
-
- c := &configCenter{}
- err := c.startConfigCenter(*baseConfig)
- assert.Error(t, err)
-}
diff --git a/config/remote_config.go b/config/remote_config.go
index 25e1761..292a89e 100644
--- a/config/remote_config.go
+++ b/config/remote_config.go
@@ -18,6 +18,7 @@
package config
import (
+ "net/url"
"time"
)
@@ -55,7 +56,8 @@ func (rc *RemoteConfig) Timeout() time.Duration {
if res, err := time.ParseDuration(rc.TimeoutStr); err == nil {
return res
}
- logger.Errorf("Could not parse the timeout string to Duration: %s, the default value will be returned", rc.TimeoutStr)
+ logger.Errorf("Could not parse the timeout string to Duration: %s, the default value will be returned",
+ rc.TimeoutStr)
return 5 * time.Second
}
@@ -69,14 +71,29 @@ func (rc *RemoteConfig) GetParam(key string, def string) string {
return param
}
-func (rc *RemoteConfig) toURL() (*common.URL, error) {
+// ToURL config to url
+func (rc *RemoteConfig) ToURL() (*common.URL, error) {
if len(rc.Protocol) == 0 {
return nil, perrors.Errorf("Must provide protocol in RemoteConfig.")
}
return common.NewURL(rc.Address,
+ common.WithProtocol(rc.Protocol),
common.WithUsername(rc.Username),
common.WithPassword(rc.Password),
common.WithLocation(rc.Address),
- common.WithProtocol(rc.Protocol),
+ common.WithParams(rc.getUrlMap()),
)
}
+
+// getUrlMap get url map
+func (rc *RemoteConfig) getUrlMap() url.Values {
+ urlMap := url.Values{}
+ urlMap.Set(constant.CONFIG_USERNAME_KEY, rc.Username)
+ urlMap.Set(constant.CONFIG_PASSWORD_KEY, rc.Password)
+ urlMap.Set(constant.CONFIG_TIMEOUT_KEY, rc.TimeoutStr)
+
+ for key, val := range rc.Params {
+ urlMap.Set(key, val)
+ }
+ return urlMap
+}
diff --git a/config_center/apollo/impl_test.go b/config_center/apollo/impl_test.go
index d0df630..3392868 100644
--- a/config_center/apollo/impl_test.go
+++ b/config_center/apollo/impl_test.go
@@ -187,7 +187,7 @@ func initMockApollo(t *testing.T) *apolloConfiguration {
c := &config.BaseConfig{ConfigCenterConfig: &config.ConfigCenterConfig{
Protocol: "apollo",
Address: "106.12.25.204:8080",
- AppId: "testApplication_yang",
+ AppID: "testApplication_yang",
Cluster: "dev",
Namespace: "mockDubbog",
}}
diff --git a/config_center/nacos/client.go b/config_center/nacos/client.go
index f53c629..908012b 100644
--- a/config_center/nacos/client.go
+++ b/config_center/nacos/client.go
@@ -18,7 +18,6 @@
package nacos
import (
- "strings"
"sync"
"time"
)
@@ -29,7 +28,6 @@ import (
)
import (
- "dubbo.apache.org/dubbo-go/v3/common/constant"
"dubbo.apache.org/dubbo-go/v3/common/logger"
"dubbo.apache.org/dubbo-go/v3/remoting/nacos"
)
@@ -58,58 +56,21 @@ func (n *NacosClient) SetClient(configClient *nacosClient.NacosConfigClient) {
n.Unlock()
}
-type option func(*options)
-
-type options struct {
- nacosName string
- // configClient *NacosClient
-}
-
-// WithNacosName Set nacos name
-func WithNacosName(name string) option {
- return func(opt *options) {
- opt.nacosName = name
- }
-}
-
// ValidateNacosClient Validate nacos configClient , if null then create it
-func ValidateNacosClient(container nacosClientFacade, opts ...option) error {
+func ValidateNacosClient(container nacosClientFacade) error {
if container == nil {
return perrors.Errorf("container can not be null")
}
- os := &options{}
- for _, opt := range opts {
- opt(os)
- }
-
url := container.GetURL()
- timeout, err := time.ParseDuration(url.GetParam(constant.REGISTRY_TIMEOUT_KEY, constant.DEFAULT_REG_TIMEOUT))
- if err != nil {
- logger.Errorf("invalid timeout config %+v,got err %+v",
- url.GetParam(constant.REGISTRY_TIMEOUT_KEY, constant.DEFAULT_REG_TIMEOUT), err)
- return perrors.WithMessagef(err, "newNacosClient(address:%+v)", url.Location)
- }
- nacosAddresses := strings.Split(url.Location, ",")
- if container.NacosClient() == nil {
+ if container.NacosClient() == nil || container.NacosClient().Client() == nil {
// in dubbo ,every registry only connect one node ,so this is []string{r.Address}
newClient, err := nacos.NewNacosConfigClientByUrl(url)
if err != nil {
- logger.Errorf("newNacosClient(name{%s}, nacos address{%v}, timeout{%d}) = error{%v}",
- os.nacosName, url.Location, timeout.String(), err)
+ logger.Errorf("ValidateNacosClient(name{%s}, nacos address{%v} = error{%v}", url.Location, err)
return perrors.WithMessagef(err, "newNacosClient(address:%+v)", url.Location)
}
container.SetNacosClient(newClient)
}
-
- if container.NacosClient().Client() == nil {
- configClient, err := nacos.NewNacosConfigClientByUrl(url)
- if err != nil {
- logger.Errorf("initNacosConfigClient(addr:%+v,timeout:%v,url:%v) = err %+v",
- nacosAddresses, timeout.String(), url, err)
- return perrors.WithMessagef(err, "newNacosClient(address:%+v)", url.Location)
- }
- container.NacosClient().SetClient(configClient.Client())
- }
return perrors.WithMessagef(nil, "newNacosClient(address:%+v)", url.PrimitiveURL)
}
diff --git a/config_center/nacos/client_test.go b/config_center/nacos/client_test.go
index 458f2d9..86305e7 100644
--- a/config_center/nacos/client_test.go
+++ b/config_center/nacos/client_test.go
@@ -39,7 +39,7 @@ func TestNewNacosClient(t *testing.T) {
url: registryUrl,
done: make(chan struct{}),
}
- err := ValidateNacosClient(c, WithNacosName(nacosClientName))
+ err := ValidateNacosClient(c)
assert.NoError(t, err)
c.wg.Add(1)
go HandleClientRestart(c)
@@ -63,7 +63,7 @@ func TestSetNacosClient(t *testing.T) {
done: make(chan struct{}),
}
- err := ValidateNacosClient(c, WithNacosName(nacosClientName))
+ err := ValidateNacosClient(c)
assert.NoError(t, err)
c.wg.Add(1)
go HandleClientRestart(c)
@@ -85,7 +85,7 @@ func TestNewNacosClient_connectError(t *testing.T) {
url: registryUrl,
done: make(chan struct{}),
}
- err = ValidateNacosClient(c, WithNacosName(nacosClientName))
+ err = ValidateNacosClient(c)
assert.NoError(t, err)
c.wg.Add(1)
go HandleClientRestart(c)
diff --git a/config_center/nacos/impl.go b/config_center/nacos/impl.go
index 50e1094..6d7326a 100644
--- a/config_center/nacos/impl.go
+++ b/config_center/nacos/impl.go
@@ -65,7 +65,7 @@ func newNacosDynamicConfiguration(url *common.URL) (*nacosDynamicConfiguration,
url: url,
done: make(chan struct{}),
}
- err := ValidateNacosClient(c, WithNacosName(nacosClientName))
+ err := ValidateNacosClient(c)
if err != nil {
logger.Errorf("nacos configClient start error ,error message is %v", err)
return nil, err
diff --git a/registry/nacos/service_discovery.go b/registry/nacos/service_discovery.go
index def1996..174bf0b 100644
--- a/registry/nacos/service_discovery.go
+++ b/registry/nacos/service_discovery.go
@@ -326,7 +326,7 @@ func newNacosServiceDiscovery(name string) (registry.ServiceDiscovery, error) {
return nil, perrors.New("could not init the instance because the config is invalid")
}
- remoteConfig, ok := config.GetBaseConfig().GetRemoteConfig(sdc.RemoteRef)
+ rc, ok := config.GetBaseConfig().GetRemoteConfig(sdc.RemoteRef)
if !ok {
return nil, perrors.New("could not find the remote config for name: " + sdc.RemoteRef)
}
@@ -334,13 +334,16 @@ func newNacosServiceDiscovery(name string) (registry.ServiceDiscovery, error) {
if len(group) == 0 {
group = defaultGroup
}
-
- client, err := nacos.NewNacosClient(remoteConfig)
+ // set protocol if remote not set
+ if len(rc.Protocol) <= 0 {
+ rc.Protocol = sdc.Protocol
+ }
+ client, err := nacos.NewNacosClient(rc)
if err != nil {
return nil, perrors.WithMessage(err, "create nacos namingClient failed.")
}
- descriptor := fmt.Sprintf("nacos-service-discovery[%s]", remoteConfig.Address)
+ descriptor := fmt.Sprintf("nacos-service-discovery[%s]", rc.Address)
newInstance := &nacosServiceDiscovery{
group: group,
diff --git a/remoting/nacos/builder.go b/remoting/nacos/builder.go
index 4624061..c42cc93 100644
--- a/remoting/nacos/builder.go
+++ b/remoting/nacos/builder.go
@@ -68,65 +68,43 @@ func GetNacosConfig(url *common.URL) ([]nacosConstant.ServerConfig, nacosConstan
serverConfigs = append(serverConfigs, nacosConstant.ServerConfig{IpAddr: ip, Port: uint64(port)})
}
- var clientConfig nacosConstant.ClientConfig
timeout, err := time.ParseDuration(url.GetParam(constant.REGISTRY_TIMEOUT_KEY, constant.DEFAULT_REG_TIMEOUT))
if err != nil {
return []nacosConstant.ServerConfig{}, nacosConstant.ClientConfig{}, err
}
- //enable local cache when nacos can not connect.
- notLoadCache, err := strconv.ParseBool(url.GetParam(constant.NACOS_NOT_LOAD_LOCAL_CACHE, "true"))
- if err != nil {
- notLoadCache = false
- }
- clientConfig.TimeoutMs = uint64(timeout.Seconds() * 1000)
- // clientConfig.ListenInterval = 2 * clientConfig.TimeoutMs
- clientConfig.CacheDir = url.GetParam(constant.NACOS_CACHE_DIR_KEY, "")
- clientConfig.LogDir = url.GetParam(constant.NACOS_LOG_DIR_KEY, "")
- clientConfig.Endpoint = url.GetParam(constant.NACOS_ENDPOINT, "")
- clientConfig.NamespaceId = url.GetParam(constant.NACOS_NAMESPACE_ID, "")
- clientConfig.Username = url.GetParam(constant.NACOS_USERNAME, "")
- clientConfig.Password = url.GetParam(constant.NACOS_PASSWORD, "")
- clientConfig.NotLoadCacheAtStart = notLoadCache
+ clientConfig := nacosConstant.ClientConfig{
+ TimeoutMs: uint64(int32(timeout / time.Millisecond)),
+ BeatInterval: url.GetParamInt(constant.NACOS_BEAT_INTERVAL_KEY, 5000),
+ NamespaceId: url.GetParam(constant.NACOS_NAMESPACE_ID, ""),
+ AppName: url.GetParam(constant.NACOS_APP_NAME_KEY, ""),
+ Endpoint: url.GetParam(constant.NACOS_ENDPOINT, ""),
+ RegionId: url.GetParam(constant.NACOS_REGION_ID_KEY, ""),
+ AccessKey: url.GetParam(constant.NACOS_ACCESS_KEY, ""),
+ SecretKey: url.GetParam(constant.NACOS_SECRET_KEY, ""),
+ OpenKMS: url.GetParamBool(constant.NACOS_OPEN_KMS_KEY, false),
+ CacheDir: url.GetParam(constant.NACOS_CACHE_DIR_KEY, ""),
+ UpdateThreadNum: url.GetParamByIntValue(constant.NACOS_UPDATE_THREAD_NUM_KEY, 20),
+ NotLoadCacheAtStart: url.GetParamBool(constant.NACOS_NOT_LOAD_LOCAL_CACHE, true),
+ Username: url.GetParam(constant.NACOS_USERNAME, ""),
+ Password: url.GetParam(constant.NACOS_PASSWORD, ""),
+ LogDir: url.GetParam(constant.NACOS_LOG_DIR_KEY, ""),
+ LogLevel: url.GetParam(constant.NACOS_LOG_LEVEL_KEY, "info"),
+ }
return serverConfigs, clientConfig, nil
}
// NewNacosClient create an instance with the config
func NewNacosClient(rc *config.RemoteConfig) (*nacosClient.NacosNamingClient, error) {
- if len(rc.Address) == 0 {
- return nil, perrors.New("nacos address is empty!")
- }
- addresses := strings.Split(rc.Address, ",")
- scs := make([]nacosConstant.ServerConfig, 0, len(addresses))
- for _, addr := range addresses {
- ip, portStr, err := net.SplitHostPort(addr)
- if err != nil {
- return nil, perrors.WithMessagef(err, "split [%s] ", addr)
- }
- port, _ := strconv.Atoi(portStr)
- scs = append(scs, nacosConstant.ServerConfig{
- IpAddr: ip,
- Port: uint64(port),
- })
+ url, err := rc.ToURL()
+ if err != nil {
+ return nil, err
}
+ scs, cc, err := GetNacosConfig(url)
- var cc nacosConstant.ClientConfig
- timeout := rc.Timeout()
- //enable local cache when nacos can not connect.
- notLoadCache, err := strconv.ParseBool(rc.GetParam(constant.NACOS_NOT_LOAD_LOCAL_CACHE, "true"))
if err != nil {
- notLoadCache = false
+ return nil, err
}
- cc.TimeoutMs = uint64(timeout.Nanoseconds() / constant.MsToNanoRate)
- // cc.ListenInterval = 2 * cc.TimeoutMs
- cc.CacheDir = rc.GetParam(constant.NACOS_CACHE_DIR_KEY, "")
- cc.LogDir = rc.GetParam(constant.NACOS_LOG_DIR_KEY, "")
- cc.Endpoint = rc.GetParam(constant.NACOS_ENDPOINT, "")
- cc.NamespaceId = rc.GetParam(constant.NACOS_NAMESPACE_ID, "")
- cc.Username = rc.Username
- cc.Password = rc.Password
- cc.NotLoadCacheAtStart = notLoadCache
-
return nacosClient.NewNacosNamingClient(getNacosClientName(), true, scs, cc)
}
diff --git a/remoting/nacos/builder_test.go b/remoting/nacos/builder_test.go
index 0d43ed0..959d27e 100644
--- a/remoting/nacos/builder_test.go
+++ b/remoting/nacos/builder_test.go
@@ -35,6 +35,8 @@ import (
func TestNewNacosClient(t *testing.T) {
rc := &config.RemoteConfig{}
+ rc.Protocol = "nacos"
+ rc.Username = "nacos"
client, err := NewNacosClient(rc)
// address is nil