Docker 安装 Nacos

JVM_XMS=512m -e JVM_XMX=512m -e JVM_XMN=256m 如果你的内存足够大则不需要设置,使用默认即可

1
docker run --name nacos-standalone -p 8848:8848 -e MODE=standalone -e JVM_XMS=512m -e JVM_XMX=512m -e JVM_XMN=256m -d nacos/nacos-server:latest

访问 Nacos

如果访问失败 可尝试重启系统!

http:// 你的 docker ip:8848/nacos

账号:nacos

密码:nacos

image-20220225190826837

持久化的 Mysql 中

简单使用不需要配置,在生产环境中需要配置

环境要求

  • Mysql 5.7 以上

注意,mysql5.6 版本会报错:Specified key was too long; max key length is 767 bytes,原因是 mysql5.6 最长的索引是 767,要用 Mysql5.7 以上版本解决该问题。

步骤

https://github.com/alibaba/nacos/releases

目前 docker Nacos 版本为 2.3.0

  1. 下载 对应版本的 Nacos 获得配置文件中的 conf/nacos-mysql.sql

    image-20220327172804381

2.创建数据库 nacos_config 并到导入 nacos-mysql.sql

image-20220327180728038

  1. 进入容器中修改配置文件
1
2
3
sudo docker ps -a
sudo docker exec -it 0d8 /bin/bash
vim conf/application.properties

修改以下内容

1
2
3
4
5
spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://likfees.cn:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true
db.user=root
db.password=123456

image-20220327182744186

登录 Nacos 新建命名空间查看数据库是否成功!

image-20220327182910811

Nacos 的使用

命名空间

可以隔离配置集,将某些配置集放到某一个命名空间之下。

命名空间我们一般用来区分 微服务

抛出一个问题: 你现在确实能够隔离微服务,但是不同的微服务的开发、测试、生产环境如何区别,

组可以用来区别区别开发、测试、生产环境

dataid - 配置集

一个配置集就是一个配置文件, 实际上可以更灵活

Python

https://github.com/nacos-group/nacos-sdk-python

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
def update_cfg(args):
print("配置发生了变化")
global config
config = json.dumps(args)
print(config)

NACOS = {
"host": "172.17.0.1",
"port": 8848,
"user": "nacos",
"password": "000",
"name_space": "7319546d-df6f-4366-b1cc-005c41f3e054", # 命名空间
"group": "dev",
"user_srv_data_id": "user-srv", # 数据集id
"db_data_id": "db",
}

nacos_client = nacos.NacosClient(f'{NACOS["host"]}:{NACOS["port"]}', namespace=NACOS["name_space"])
# nacos 返回的是字符串,需要使用json.loads加载
config = json.loads(nacos_client.get_config(NACOS["user_srv_data_id"], NACOS["group"]))

print(config)


# 监听配置文件修改 PS:如果是Window系统可能会出现错误,需要在 main方法中调用
nacos_client.add_config_watcher(NACOS["user_srv_data_id"], NACOS["group"], update_cfg)

Golang

https://github.com/nacos-group/nacos-sdk-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
// 从 Nacos 中获取配置信息
//create clientConfig
clientConfig := constant.ClientConfig{
NamespaceId: 命名空间ID,
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
LogDir: "tmp/nacos/log",
CacheDir: "tmp/nacos/cache",
LogLevel: "debug",
}

// At least one ServerConfig
serverConfigs := []constant.ServerConfig{
{
IpAddr: global.NacosConfig.Host, // nacos服务地址
Port: global.NacosConfig.Port, // nacos服务端口
},
}
configClient, err := clients.CreateConfigClient(map[string]interface{}{
"serverConfigs": serverConfigs,
"clientConfig": clientConfig,
})
if err != nil {
panic(err)
}
content, err := configClient.GetConfig(vo.ConfigParam{
DataId: global.NacosConfig.UserApiDataId, // 数据集ID
Group: global.NacosConfig.Group, // 组
})
if err != nil {
zap.S().Fatalw("获取 Nacos 配置信息失败", err.Error())
}
// 解析获取到的Json文本
// &global.Config 为配置文件结构体
err = json.Unmarshal([]byte(content), &global.Config)
if err != nil {
zap.S().Fatalw("解析 Nacos 配置信息失败", err.Error())
}

// 监听配置文件
err = configClient.ListenConfig(vo.ConfigParam{
DataId: global.NacosConfig.UserApiDataId,
Group: global.NacosConfig.Group,
OnChange: func(namespace, group, dataId, data string) {
fmt.Println(global.Config.Services.UserSrvName)
err = json.Unmarshal([]byte(data), &global.Config)
if err != nil {
zap.S().Fatalw("文件发生变化,解析 Nacos 配置信息失败", err.Error())
}
fmt.Println(global.Config.Services.UserSrvName)
},
})
if err != nil {
zap.S().Fatalw("监听配置文件出现异常", err.Error())
}