-
Notifications
You must be signed in to change notification settings - Fork 3
/
client.go
executable file
·143 lines (130 loc) · 4.35 KB
/
client.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
// Package nacosKit
/*
官方文档(英文):https://github.com/nacos-group/nacos-sdk-go
官方文档(中文):https://github.com/nacos-group/nacos-sdk-go/blob/master/README_CN.md
*/
package nacosKit
import (
"github.com/nacos-group/nacos-sdk-go/clients"
"github.com/nacos-group/nacos-sdk-go/clients/config_client"
"github.com/nacos-group/nacos-sdk-go/clients/naming_client"
"github.com/nacos-group/nacos-sdk-go/common/constant"
"github.com/nacos-group/nacos-sdk-go/vo"
"github.com/richelieu-yang/chimera/v2/src/core/errorKit"
"github.com/richelieu-yang/chimera/v2/src/core/fileKit"
"github.com/richelieu-yang/chimera/v2/src/core/pathKit"
"github.com/richelieu-yang/chimera/v2/src/mainControl"
"github.com/richelieu-yang/chimera/v2/src/netKit"
)
// NewNamingClient 服务发现客户端
/*
使用方法详见:https://github.com/nacos-group/nacos-sdk-go/blob/master/README_CN.md#%E6%9C%8D%E5%8A%A1%E5%8F%91%E7%8E%B0
@param logDir 日志的目录(会尝试创建目录)
@param level 日志级别(可以为nil,默认依据 mainControl.IsDebug())
*/
func NewNamingClient(config *NacosConfig, outputDir string, logLevel NacosLogLevel) (naming_client.INamingClient, error) {
clientConfig, serverConfigs, err := getConfigs(config, outputDir, logLevel)
if err != nil {
return nil, err
}
return clients.NewNamingClient(vo.NacosClientParam{
ClientConfig: clientConfig,
ServerConfigs: serverConfigs,
})
}
// NewConfigClient 动态配置客户端
/*
使用方法详见:https://github.com/nacos-group/nacos-sdk-go/blob/master/README_CN.md#%E5%8A%A8%E6%80%81%E9%85%8D%E7%BD%AE
*/
func NewConfigClient(config *NacosConfig, outputDir string, logLevel NacosLogLevel) (config_client.IConfigClient, error) {
clientConfig, serverConfigs, err := getConfigs(config, outputDir, logLevel)
if err != nil {
return nil, err
}
return clients.NewConfigClient(vo.NacosClientParam{
ClientConfig: clientConfig,
ServerConfigs: serverConfigs,
})
}
func getConfigs(config *NacosConfig, outputDir string, logLevel NacosLogLevel) (*constant.ClientConfig, []constant.ServerConfig, error) {
if config == nil {
return nil, nil, errorKit.New("config is nil")
}
// outputDir
if err := fileKit.MkDirs(outputDir); err != nil {
return nil, nil, err
}
// logLevel
if logLevel == nil {
if mainControl.IsDebug() {
logLevel = DebugLevel
} else {
logLevel = InfoLevel
}
}
// clientConfig
clientConfig, err := newClientConfig(config, outputDir, logLevel)
if err != nil {
return nil, nil, err
}
// serverConfigs
serverConfigs, err := newServerConfigs(config)
if err != nil {
return nil, nil, err
}
return &clientConfig, serverConfigs, nil
}
func newClientConfig(config *NacosConfig, outputDir string, level NacosLogLevel) (constant.ClientConfig, error) {
logDir := pathKit.Join(outputDir, "log")
if err := fileKit.MkDirs(logDir); err != nil {
return constant.ClientConfig{}, err
}
cacheDir := pathKit.Join(outputDir, "cache")
if err := fileKit.MkDirs(cacheDir); err != nil {
return constant.ClientConfig{}, err
}
return constant.ClientConfig{
// 请求Nacos服务端的超时时间,默认是10000ms
TimeoutMs: 10000,
// ACM的命名空间Id
NamespaceId: config.NamespaceId,
// 缓存service信息的目录,默认是当前运行目录
CacheDir: cacheDir,
// 在启动的时候不读取缓存在CacheDir的service信息
NotLoadCacheAtStart: true,
// 日志存储路径
LogDir: logDir,
// 日志默认级别,值必须是:debug,info,warn,error,默认值是info
LogLevel: *level,
/* Richelieu: 由于依赖更新,下面两个属性被移除 */
//// 日志轮转周期,比如:30m, 1h, 24h, 默认是24h
//RotateTime: "24h",
//// 日志最大文件数,默认3
//maxAge: 3,
}, nil
}
// newServerConfigs
/*
@return 第一个返回值"非nil"且"长度>0"
*/
func newServerConfigs(config *NacosConfig) ([]constant.ServerConfig, error) {
addresses := config.ServerAddresses
length := len(addresses)
if length == 0 {
return nil, errorKit.New("length of addresses is 0")
}
configs := make([]constant.ServerConfig, 0, length)
for _, addr := range addresses {
info, err := netKit.ParseToAddress(addr)
if err != nil {
return nil, err
}
configs = append(configs, constant.ServerConfig{
IpAddr: info.Hostname,
Port: uint64(info.Port),
ContextPath: "/nacos",
Scheme: "http",
})
}
return configs, nil
}