微服务中的配置中心nacos讲解
为什么需要分布式配置中心
不使用配置中心存在的问题
使用配置中心的方便
配置中心的选型
- 命名空间的作用:可以隔离配置集,将某些配置集放到某一个命名空间下,命名空间我们一般用来区分微服务
- DataId: 配置集,一般一个配置集就是一个配置文件,实际上可以更灵活
- 组:抛出一个问题,现在确实能够隔离微服务,但是不同的微服务的开发、测试、生产环境如何区别,组可以用来区别开发、测试、生产环境
python操作nacos配置
import json
import nacos
SERVER_ADDRESSES = "nacos.xxxxxxx.cn:80"
NAMESPACE = "19225xxxxxxxxd0dca" # 这里是namespace的id
# auth mode
client = nacos.NacosClient(SERVER_ADDRESSES, namespace=NAMESPACE, username="xxxxx", password="xxxxxx")
# get config
data_id = "user-srv.json"
group = "dev"
rsp = json.loads(client.get_config(data_id, group)) # 返回的是字符串
for k, v in rsp.items():
print(k, v)
监听配置文件的变化
import json
import time
import nacos
SERVER_ADDRESSES = "nacos.xxxx.cn:80"
NAMESPACE = "19225222xxxxxxxx0dca" # 这里是namespace的id
# auth mode
client = nacos.NacosClient(SERVER_ADDRESSES, namespace=NAMESPACE, username="nxxxxs", password="xxxxx")
# get config
data_id = "user-srv.json"
group = "dev"
rsp = json.loads(client.get_config(data_id, group)) # 返回的是字符串
for k, v in rsp.items():
print(k, v)
def test_cb(args):
print("配置文件产生变化")
for k, v in args.items():
print(k, v)
if __name__ == '__main__':
# 监听配置文件的变化
client.add_config_watcher(data_id, group, test_cb)
time.sleep(60)
go操作nacos
- nacos-skd-go中文文档
- 代码实现
点击查看代码
package main
import (
"fmt"
"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"
)
func main() {
// 至少一个ServerConfig
sc := []constant.ServerConfig{
{
IpAddr: "nacos.xxx.cnbc",
ContextPath: "/nacos",
Port: 80,
Scheme: "http",
},
}
// 创建clientConfig
cc := constant.ClientConfig{
NamespaceId: "19225222-xxxxxxxxe5d0dca", // 如果需要支持多namespace,我们可以场景多个client,它们有不同的NamespaceId。当namespace是public时,此处填空字符串。
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
LogDir: "tmp/nacos/log",
CacheDir: "tmp/nacos/cache",
LogLevel: "debug",
Username: "nacos",
Password: "nacos",
}
// 创建动态配置客户端的另一种方式 (推荐)
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &cc,
ServerConfigs: sc,
},
)
if err != nil{
panic(err)
}
// 获取配置
content, err := configClient.GetConfig(vo.ConfigParam{
DataId: "user-web.yaml",
Group: "dev",
})
if err != nil{
panic(err)
}
fmt.Println(content)
// 监听配置变化
err = configClient.ListenConfig(vo.ConfigParam{
DataId: "user-web.yaml",
Group: "dev",
OnChange: func(namespace, group, dataId, data string) {
fmt.Println("group:" + group + ", dataId:" + dataId + ", data:" + data)
},
})
if err != nil{
panic(err)
}
select {}
}