Windows 平臺Nacos配置及 golang Client 使用說明

Windows平臺上使用Nacos的情形似乎不是很多,所以也沒有找到相關的文章。自己摸索的過程中遇到了一些問題,這裏記錄一下。

Nacos  是阿里巴巴開源的服務發現工具,提供的功能主要是服務發現和配置管理。詳細說明可以參考官網文檔:https://nacos.io/zh-cn/docs/what-is-nacos.html

本文的重點是go語言如何使用Nacos進行配置管理,所以Nacos 服務採用windows部署的方式,並且是最簡單的單機部署。

 

1. Nacos快速開始:

依賴環境:64bit OS,64位 JDK1.8+

直接下載最新穩定版的可執行壓縮包 https://github.com/alibaba/nacos/releases

目前最新穩定版本是1.2.1

直接使用默認配置運行nacos/bin/startup.cmd

說明一下,這裏有必要看一下nacos的啓動日誌

有幾個地方我們後面要用到,Nacos使用Tomcat作爲容器,端口是8848,上下文路徑是/nacos。 對於配置文件、日誌文件、數據文件有興趣的可以查看一下。最終要的是控制檯地址:http://192.168.1.103:8848/nacos/index.html

Nacos 控制檯管理

功能分爲配置管理、服務管理、集羣管理、權限控制和命名空間。這裏我們只關心命名空間和配置管理兩部分,假如一個配置是一條KEY=VALUE的文本,DataID(配置集)中有一或多條配置,一個Group中有一或多個配置集,一個命名空間內可以有任意個Group。通常用命名空間分別管理開發配置、測試配置和正式環境配置。默認的命名空間是public。

Go Client

在說Go Client API之前,先看一下Open-API, Open-API 是Nacos服務提供的一組RESTful 接口,比如獲取配置就是 GET /nacos/v1/cs/configs?dataId=配置集group=分組tenant=命名空間

其中命名空間可省略,採用默認的public。在 go client的日誌中發現,它也是通過Open-API來實現的。

Go Client 下載地址: https://github.com/nacos-group/nacos-sdk-go

Go Client還依賴於其他的庫,需要依次下載,其中aliyun-cloud在下載的時候發生連接超時,需要通過科學上網來下載。

(可以參考我的Demo)

基本的使用代碼在代碼中的ReadMe.md有介紹,主要如下:

constant.ClientConfig{
    TimeoutMs:     
10 * 1000, //http請求超時時間,單位毫秒
    ListenInterval: 30 * 1000, //監聽間隔時間,單位毫秒(僅在ConfigClient中有效)
    BeatInterval:   5 * 1000, //心跳間隔時間,單位毫秒(僅在ServiceClient中有效)
    NamespaceId:       "public", //nacos命名空間
    Endpoint:          "", //獲取nacos節點ip的服務地址
    CacheDir:         "/data/nacos/cache", //緩存目錄
    LogDir:         "/data/nacos/log", //日誌目錄
    UpdateThreadNum:   20, //更新服務的線程數
    NotLoadCacheAtStart: true, //在啓動時不讀取本地緩存數據,true--不讀取,false--讀取
    UpdateCacheWhenEmpty: true, //當服務列表爲空時是否更新本地緩存,true--更新,false--不更新
}

Nacos客戶端配置, 需要說明的有三處,

Endpoint 是通過阿里雲ACM(應用配置管理)來部署nacos時使用,可以通過Endpoint來找到nacos服務器的地址信息。

CacheDir: 配置的緩存目錄,獲取到的配置數據會放到CacheDir下的config目錄下,文件名是dataId@@group@@namespace。 windows平臺下這裏的config目錄需要手動創建。

LogDir 是客戶端日誌的存放目錄,在創建日誌文件之後,還會創建該文件的軟連接,所以還需要用管理員權限運行,才能夠正常執行。

 

constant.ServerConfig{
    IpAddr:      "console.nacos.io",
//nacos服務的ip地址
    ContextPath: "/nacos", //nacos服務的上下文路徑,默認是“/nacos”
    Port:        8848, //nacos服務端口
}

服務配置信息可以參考上面的服務日誌信息,IP 就是本機IP、端口和上下文路徑分別是8848和/nacos。 關於上下文路徑,它實際就是uri根路徑信息。比如獲取配置的uri就是IP:port/contextPath/v1/vs/configs?params

示例代碼:

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() {
	clientConfig := constant.ClientConfig{
		TimeoutMs:      10 * 1000, //http請求超時時間,單位毫秒
		ListenInterval: 30 * 1000, //監聽間隔時間,單位毫秒(僅在ConfigClient中有效)
		BeatInterval:   5 * 1000, //心跳間隔時間,單位毫秒(僅在ServiceClient中有效)
		NamespaceId:       "", //nacos命名空間
		Endpoint:          "", //獲取nacos節點ip的服務地址
		CacheDir:         "D:\\temp\\cache", //緩存目錄
		LogDir:         "D:\\temp\\log", //日誌目錄
		UpdateThreadNum:   20, //更新服務的線程數
		NotLoadCacheAtStart: true, //在啓動時不讀取本地緩存數據,true--不讀取,false--讀取
		UpdateCacheWhenEmpty: true, //當服務列表爲空時是否更新本地緩存,true--更新,false--不更新
	}

	// 至少一個
	serverConfigs := []constant.ServerConfig{
		{
			IpAddr:      "127.0.0.1",
			ContextPath: "/nacos",
			Port:        8848,
		},
	}


	configClient, err := clients.CreateConfigClient(map[string]interface{}{
		"serverConfigs": serverConfigs,
		"clientConfig":  clientConfig,
	})
	if err != nil {
		fmt.Println(err)
		return
	}

	//success, err := configClient.PublishConfig(vo.ConfigParam{
	//	DataId:  "testId",
	//	Group:   "testGroup",
	//	Content: "hello world!222222"})
	//if err!=nil ||!success {
	//	fmt.Println("publish failed",err)
	//}

	content, err := configClient.GetConfig(vo.ConfigParam{
		DataId: "mysql",
		Group:  "CDN",
	})
	if err != nil {
		fmt.Println(err)
	}
	fmt.Println("content:" + content)

}

 

如果有錯誤發生,可以多看看日誌。

ACM 應用配置管理

如果使用ACM部署的nacos服務,直接參考官方的說明文檔即可。

https://help.aliyun.com/document_detail/130146.html?spm=a2c4g.11186623.3.3.186166eexxWHnu

這裏也可以簡單演示一下:

ACM生成的有4個配置項Endpoint、NameSpace、accessKey、secretKey ,後面兩個key是服務器安全用的,我們暫且不管。namespace就是前面的命名空間,Endpoint 在nacos的日誌中也有(基於base path的相對路徑是 /actuator ),也就是127.0.0.1:8848/nacos/actuator。 直接使用SDK的示例代碼

 

// 從控制檯命名空間管理的"命名空間詳情"中拷貝 End Point、命名空間 ID
	var endpoint = "192.168.1.103:8848/nacos/actuator"
	var namespaceId = ""

	// 推薦使用 RAM 用戶的 accessKey、secretKey
	//var accessKey = "${accessKey}"
	//var secretKey = "${secretKey}"

	clientConfig := constant.ClientConfig{
		//
		Endpoint:       endpoint,
		NamespaceId:    namespaceId,
		//AccessKey:      accessKey,
		//SecretKey:      secretKey,
		CacheDir:         "D:\\temp\\cache", //緩存目錄
		LogDir:         "D:\\temp\\log", //日誌目錄
		TimeoutMs:      5 * 1000,
		ListenInterval: 30 * 1000,
	}

	configClient, err := clients.CreateConfigClient(map[string]interface{}{
		"clientConfig": clientConfig,
	})

	if err != nil {
		fmt.Println(err)
		return
	}

	var dataId = "mysql"
	var group = "CDN"

	// 獲取配置
	content, err := configClient.GetConfig(vo.ConfigParam{
		DataId: dataId,
		Group:  group})

	fmt.Println("Get config:" + content)

測試結果是一樣的,如果使用的有阿里雲服務器,還是推薦使用ACM。官方自動配置,免費使用,省去了運維的煩惱。

Demo 下載:

https://download.csdn.net/download/u012179109/12555270

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章