1. 程式人生 > 其它 >微服務中的配置中心nacos講解

微服務中的配置中心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 {}

}