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

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值