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 }