Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
Nacos 安装
命令如下:
# intel 处理器安装
docker run --name nacos-standalone -e MODE=standalone -e JVM_XMS=128m -e JVM_XMX=128m -e JVM_XMN=128m -p 8848:8848 -p 9848:9848 -p 9555:9555 -d nacos-server:lates
# Apple Silicon 处理器安装
docker run --name nacos-standalone -e MODE=standalone -p 8848:8848 -p 9848:9848 -p 9555:9555 -e JVM_XMS=128m -e JVM_XMX=128m -e JVM_XMN=128m -d nacos/nacos-server:v2.1.0-slim
登录访问
安装成功后,通过浏览器访问 http://127.0.0.1:8848/nacos
初始账号/密码 nacos/nacos
如下图所示:
配置管理 public 之后的 goods、order 等是我本地创建的,你未创建是没有的。
新增配置
选择命名空间新建一个属于自己的空间,命名空间 ID 可以让他自己生成。
点击配置管理里的配置列表,根据自己创建的命名空间,点击 ➕ 号新增配置。
根据自己项目的需求进行增加配置。
创建好了之后,接下来编写一个简单的事例来进行测试吧。
配置 Go 语言客户端
Nacos-sdk-go 是 Nacos 的 Go 语言客户端,它实现了服务发现和动态配置的功能。
安装
使用 go get 安装 SDK:
go get -u github.com/nacos-group/nacos-sdk-go
快速使用
package main
import (
"fmt"
"time"
"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() {
sc := []constant.ServerConfig{
{
IpAddr: "127.0.0.1",
Port: 8848,
},
}
// 创建clientConfig
clientConfig := constant.ClientConfig{
NamespaceId: "e32e16ee-2bba-4fec-8db3-5466af005380", // 如果需要支持多namespace,我们可以场景多个client,它们有不同的NamespaceId。当namespace是public时,此处填空字符串。
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
LogDir: "tmp/nacos/log",
CacheDir: "tmp/nacos/cache",
LogLevel: "debug",
}
// 创建动态配置客户端
configClient, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: &clientConfig,
ServerConfigs: sc,
},
)
if err != nil {
panic(err)
}
// 获取配置
content, err := configClient.GetConfig(vo.ConfigParam{
DataId: "user-service",
Group: "dev"})
if err != nil {
panic(err)
}
fmt.Println(content)
// 监听配置更改,key=dataId+group+namespaceId。
err = configClient.ListenConfig(vo.ConfigParam{
DataId: "user-service",
Group: "dev",
OnChange: func(namespace, group, dataId, data string) {
fmt.Println("config changed group:" + group + ", dataId:" + dataId + ", content:" + data)
},
})
// 加入如下代码,修改配置时候的可以监听到
time.Sleep(3000 * time.Second)
if err != nil {
panic(err)
}
}
运行代码结果如下:
可以看到它成功的输出了我的配置,你可以自己修改一下,看看打印的结果会不会监听到并输出不一样的结果。