github.com/nacos-group/nacos-sdk-go@v1.1.4/clients/client_factory.go (about)

     1  /*
     2   * Copyright 1999-2020 Alibaba Group Holding Ltd.
     3   *
     4   * Licensed under the Apache License, Version 2.0 (the "License");
     5   * you may not use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *      http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.
    15   */
    16  
    17  package clients
    18  
    19  import (
    20  	"errors"
    21  
    22  	"github.com/nacos-group/nacos-sdk-go/clients/config_client"
    23  	"github.com/nacos-group/nacos-sdk-go/clients/nacos_client"
    24  	"github.com/nacos-group/nacos-sdk-go/clients/naming_client"
    25  	"github.com/nacos-group/nacos-sdk-go/common/constant"
    26  	"github.com/nacos-group/nacos-sdk-go/common/http_agent"
    27  	"github.com/nacos-group/nacos-sdk-go/vo"
    28  )
    29  
    30  // CreateConfigClient use to create config client
    31  func CreateConfigClient(properties map[string]interface{}) (iClient config_client.IConfigClient, err error) {
    32  	param := getConfigParam(properties)
    33  	return NewConfigClient(param)
    34  }
    35  
    36  //CreateNamingClient use to create a nacos naming client
    37  func CreateNamingClient(properties map[string]interface{}) (iClient naming_client.INamingClient, err error) {
    38  	param := getConfigParam(properties)
    39  	return NewNamingClient(param)
    40  }
    41  
    42  func NewConfigClient(param vo.NacosClientParam) (iClient config_client.IConfigClient, err error) {
    43  	nacosClient, err := setConfig(param)
    44  	if err != nil {
    45  		return
    46  	}
    47  	config, err := config_client.NewConfigClient(nacosClient)
    48  	if err != nil {
    49  		return
    50  	}
    51  	iClient = config
    52  	return
    53  }
    54  
    55  func NewNamingClient(param vo.NacosClientParam) (iClient naming_client.INamingClient, err error) {
    56  	nacosClient, err := setConfig(param)
    57  	if err != nil {
    58  		return
    59  	}
    60  	naming, err := naming_client.NewNamingClient(nacosClient)
    61  	if err != nil {
    62  		return
    63  	}
    64  	iClient = &naming
    65  	return
    66  }
    67  
    68  func getConfigParam(properties map[string]interface{}) (param vo.NacosClientParam) {
    69  
    70  	if clientConfigTmp, exist := properties[constant.KEY_CLIENT_CONFIG]; exist {
    71  		if clientConfig, ok := clientConfigTmp.(constant.ClientConfig); ok {
    72  			param.ClientConfig = &clientConfig
    73  		}
    74  	}
    75  	if serverConfigTmp, exist := properties[constant.KEY_SERVER_CONFIGS]; exist {
    76  		if serverConfigs, ok := serverConfigTmp.([]constant.ServerConfig); ok {
    77  			param.ServerConfigs = serverConfigs
    78  		}
    79  	}
    80  	return
    81  }
    82  
    83  func setConfig(param vo.NacosClientParam) (iClient nacos_client.INacosClient, err error) {
    84  	client := &nacos_client.NacosClient{}
    85  	if param.ClientConfig == nil {
    86  		// default clientConfig
    87  		_ = client.SetClientConfig(constant.ClientConfig{})
    88  	} else {
    89  		_ = client.SetClientConfig(*param.ClientConfig)
    90  	}
    91  
    92  	if len(param.ServerConfigs) == 0 {
    93  		clientConfig, _ := client.GetClientConfig()
    94  		if len(clientConfig.Endpoint) <= 0 {
    95  			err = errors.New("server configs not found in properties")
    96  			return nil, err
    97  		}
    98  		_ = client.SetServerConfig([]constant.ServerConfig{})
    99  	} else {
   100  		err = client.SetServerConfig(param.ServerConfigs)
   101  		if err != nil {
   102  			return nil, err
   103  		}
   104  	}
   105  
   106  	if _, _err := client.GetHttpAgent(); _err != nil {
   107  		_ = client.SetHttpAgent(&http_agent.HttpAgent{})
   108  	}
   109  	iClient = client
   110  	return
   111  }