Loading

Nacos 分布式配置中心配置

Docker 安装 Nacos

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

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. 进入容器中修改配置文件
sudo docker ps -a
sudo docker exec -it 0d8 /bin/bash
vim conf/application.properties

修改以下内容

spring.datasource.platform=mysql
db.num=1
db.url.0=jdbc:mysql://lzscxb.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

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

// 从 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())
	}
posted @ 2022-06-07 15:51  白日醒梦  阅读(729)  评论(0编辑  收藏  举报