微服务中的配置中心nacos讲解

为什么需要分布式配置中心

不使用配置中心存在的问题

使用配置中心的方便

配置中心的选型


  1. 命名空间的作用:可以隔离配置集,将某些配置集放到某一个命名空间下,命名空间我们一般用来区分微服务
  2. DataId: 配置集,一般一个配置集就是一个配置文件,实际上可以更灵活
  3. 组:抛出一个问题,现在确实能够隔离微服务,但是不同的微服务的开发、测试、生产环境如何区别,组可以用来区别开发、测试、生产环境

python操作nacos配置

github 源码

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

  1. nacos-skd-go中文文档
  2. 代码实现
点击查看代码
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 {}

}
posted @ 2022-03-19 11:47  专职  阅读(219)  评论(0编辑  收藏  举报