配置中心:Nacos
原创大约 3 分钟
集成&开发
环境和脚本
> go get -u github.com/nacos-group/nacos-sdk-go
> docker run --name nacos -e MODE=standalone -p 8848:8848 -d nacos/nacos-server
Gin服务接口
1. 配置结构体
......
// NacosConfig 这个struct不需要被解析成JSON
type NacosConfig struct {
Host string `mapstructure:"host"`
Port uint64 `mapstructure:"port"`
Namespaceid string `mapstructure:"namespaceid"`
Namespace string `mapstructure:"namespace"`
Context string `mapstructure:"context"`
Schema string `mapstructure:"schema"`
Dataid string `mapstructure:"dataid"`
Loglevel string `mapstructure:"loglevel"`
}
2. 全局变量
......
var (
ServerConfig *config.ServerConfig = new(config.ServerConfig)
NacosConfig *config.NacosConfig = new(config.NacosConfig)
UserSrvClient proto.UserServiceClient
Translator ut.Translator
ExpiredTime int64 = 3600
)
3. 初始化配置
package initialize
import (
"encoding/json"
"github.com/fsnotify/fsnotify"
"github.com/nacos-group/nacos-sdk-go/clients"
"github.com/nacos-group/nacos-sdk-go/common/constant"
"github.com/nacos-group/nacos-sdk-go/vo"
"github.com/spf13/viper"
"go.uber.org/zap"
"gomicroservice/userapi/global"
)
func InitialConfiguration(env string) {
......
// 从Nacos中获取配置
serverConfigs := []constant.ServerConfig{
{
IpAddr: global.NacosConfig.Host,
Port: global.NacosConfig.Port,
ContextPath: global.NacosConfig.Context,
Scheme: global.NacosConfig.Schema,
},
}
clientConfig := constant.ClientConfig{
NamespaceId: global.NacosConfig.Namespaceid,
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
LogDir: "tmp/nacos/log",
CacheDir: "tmp/nacos/cache",
LogLevel: global.NacosConfig.Loglevel,
}
//// 创建服务发现客户端:可用它来代替Consul
//namingClient, err1 := clients.CreateNamingClient(map[string]interface{}{
// "serverConfigs": serverConfigs,
// "clientConfig": clientConfig,
//})
//if err1 != nil {
// panic(err1)
//}
// 创建动态配置客户端
configClient, err2 := clients.CreateConfigClient(map[string]interface{}{
"serverConfigs": serverConfigs,
"clientConfig": clientConfig,
})
if err2 != nil {
zap.S().Panicf("创建动态配置客户端失败:%s", err2.Error())
}
content, err3 := configClient.GetConfig(vo.ConfigParam{
DataId: global.NacosConfig.Dataid,
Group: env,
})
if err3 != nil {
zap.S().Panicf("创建动态配置客户端失败:%s", err3.Error())
}
// 将字符串转换为json
err4 := json.Unmarshal([]byte(content), &global.ServerConfig)
if err4 != nil {
zap.S().Panicf("解析配置文件失败:%s", err4.Error())
}
// 监听配置的变化
err5 := configClient.ListenConfig(vo.ConfigParam{
DataId: global.NacosConfig.Dataid,
Group: env,
OnChange: func(namespace, group, dataId, data string) {
zap.S().Infof("Nacos配置文件修改了:group=%s,dataid=%s", env, global.NacosConfig.Dataid)
},
})
if err5 != nil {
zap.S().Panicf("监听配置文件修改失败:%s", err5.Error())
}
}
GRPC服务实现
1. 配置结构体
......
// NacosConfig 这个struct不需要被解析成JSON
type NacosConfig struct {
Host string `mapstructure:"host"`
Port uint64 `mapstructure:"port"`
Namespaceid string `mapstructure:"namespaceid"`
Namespace string `mapstructure:"namespace"`
Context string `mapstructure:"context"`
Schema string `mapstructure:"schema"`
Dataid string `mapstructure:"dataid"`
Loglevel string `mapstructure:"loglevel"`
}
2. 全局变量
......
var (
DB *gorm.DB
ServerConfig *config.ServerConfig = new(config.ServerConfig)
NacosConfig *config.NacosConfig = new(config.NacosConfig)
)
3. 初始化配置
package initialize
import (
"encoding/json"
"github.com/fsnotify/fsnotify"
"github.com/nacos-group/nacos-sdk-go/clients"
"github.com/nacos-group/nacos-sdk-go/common/constant"
"github.com/nacos-group/nacos-sdk-go/vo"
"github.com/spf13/viper"
"go.uber.org/zap"
"gomicroservice/usersrv/global"
)
// InitialConfiguration 初始化配置
func InitialConfiguration(env string) {
......
// 从Nacos中获取配置
serverConfigs := []constant.ServerConfig{
{
IpAddr: global.NacosConfig.Host,
Port: global.NacosConfig.Port,
ContextPath: global.NacosConfig.Context,
Scheme: global.NacosConfig.Schema,
},
}
clientConfig := constant.ClientConfig{
NamespaceId: global.NacosConfig.Namespaceid,
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
LogDir: "tmp/nacos/log",
CacheDir: "tmp/nacos/cache",
LogLevel: global.NacosConfig.Loglevel,
}
//// 创建服务发现客户端
//namingClient, err1 := clients.CreateNamingClient(map[string]interface{}{
// "serverConfigs": serverConfigs,
// "clientConfig": clientConfig,
//})
//if err1 != nil {
// panic(err1)
//}
// 创建动态配置客户端:可用它代替Consul
configClient, err2 := clients.CreateConfigClient(map[string]interface{}{
"serverConfigs": serverConfigs,
"clientConfig": clientConfig,
})
if err2 != nil {
zap.S().Panicf("创建动态配置客户端失败:%s", err2.Error())
}
content, err3 := configClient.GetConfig(vo.ConfigParam{
DataId: global.NacosConfig.Dataid,
Group: env,
})
if err3 != nil {
zap.S().Panicf("创建动态配置客户端失败:%s", err3.Error())
}
// 将字符串转换为json
err4 := json.Unmarshal([]byte(content), &global.ServerConfig)
if err4 != nil {
zap.S().Panicf("解析配置文件失败:%s", err4.Error())
}
// 监听配置的变化
err5 := configClient.ListenConfig(vo.ConfigParam{
DataId: global.NacosConfig.Dataid,
Group: env,
OnChange: func(namespace, group, dataId, data string) {
zap.S().Infof("Nacos配置文件修改了:group=%s,dataid=%s", env, global.NacosConfig.Dataid)
},
})
if err5 != nil {
zap.S().Panicf("监听配置文件修改失败:%s", err5.Error())
}
}
感谢支持
更多内容,请移步《超级个体》。