Go微服务框架go-kratos实战学习06:配置中心使用-nacos作为配置中心和 file作为配置存储
一、kratos 配置介绍
配置文件的作用就是把一些会变化的配置项单独存放,与程序相剥离。
把配置项进行单独管理。
kratos 支持多种形式的配置,
比如 file,环境变量。
还支持一些配置软件,比如:
等等。
它也支持多种格式,比如 json、yaml、proto、xml 等。
katos 还支持热更新功能
kratos 中的 config 热更新功能,可以在服务不重新发布、不停机、不重启情况下,在线更新服务配置,修改服务行为。
二、基本使用步骤
go-kratos: v2.4.0
Go: v1.17.10
基本使用步骤
- 初始化配置源:解析的配置项数据源来自 file,还是配置软件里存储的数据。
- 读取配置值
例子1:配置源是 file
文档:https://go-kratos.dev/docs/component/config/#1初始化配置源
第一步,初始化配置源。
import (
"github.com/go-kratos/kratos/v2/config"
"github.com/go-kratos/kratos/v2/config/file"
)
path := "./config.yaml"
c := config.New(
config.WithSource( // 初始化配置源
file.NewSource(path),
),
)
第二步,读取配置值
path := "./config.yaml"
c := config.New(
config.WithSource( // 初始化配置
file.NewSource(path),
),
)
if err := c.Load(); err != nil { //加载配置
panic(err)
}
// 定义读取配置文件的结构
var v struct {
Service struct {
Name string `json:"name"`
Version string `json:"version"`
} `json:"service"`
}
if err := c.Scan(&v); err != nil { // 读取配置到结构体
panic(err)
}
log.Printf("config: %+v", v)
// 获取值
name, err := c.Value("service.name").String()
if err != nil {
panic(err)
}
log.Printf("service: %s", name)
上面的配置文件 config.yaml
service:
name: config
version: v1.0.0
http:
server:
address: 0.0.0.0:8000
timeout: 1s
grpc:
server:
address: 0.0.0.0:9000
timeout: 1s
例子2:nacos 作为配置中心
nacos 文档
比如使用 nacos。
nacos 文档上介绍的功能:
Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。
nacos 安装
我直接在 github 上下载的 win 安装版本:https://github.com/alibaba/nacos/releases/download/2.1.0/nacos-server-2.1.0.zip。解压后直接到nacos的bin目录,执行命令 startup.cmd -m standalone,就会启动 nacos。
运行nacos前,还有一些预备环境,可以到Nacos快速开始查看安装nacos的预备环境文档。
执行启动命名:
startup.cmd -m standalone

上面图片已经显示了进入 console 的 url 地址。
进入 console 界面:
进入 console 界面:http://192.168.56.1:8848/nacos/index.html 默认用户名/密码:nacos/nacos。

新建配置
在上面console图片界面的右边有一个大大的 + 号,点击它转到新建配置页面,相关填写项如下图

service:
name: config
version: v1.0.0
http:
server:
address: 0.0.0.0:8000
timeout: 1s
grpc:
server:
address: 0.0.0.0:9000
timeout: 1s
点击发布,如下图:

编写读取配置代码
nacos go-sdk:
nacos 的 go-sdk 以及文档:https://github.com/nacos-group/nacos-sdk-go
github.com/nacos-group/nacos-sdk-go v1.1.1
获取 nacos 配置:
package main
import (
"log"
"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"
knacos "github.com/go-kratos/kratos/contrib/config/nacos/v2"
"github.com/go-kratos/kratos/v2/config"
)
func main() {
sc := []constant.ServerConfig{
*constant.NewServerConfig("127.0.0.1", 8848),
}
cc := &constant.ClientConfig{
NamespaceId: "public",
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
LogDir: "./config/log",
CacheDir: "./config/cache",
LogLevel: "debug",
}
client, err := clients.NewConfigClient(
vo.NacosClientParam{
ClientConfig: cc,
ServerConfigs: sc,
},
)
if err != nil {
log.Panic(err)
}
c := config.New(
config.WithSource(
knacos.NewConfigSource(
client,
knacos.WithGroup("defaulttest_group"),
knacos.WithDataID("defaulttest.yaml"),
),
),
)
if err := c.Load(); err != nil {
panic(err)
}
name, err := c.Value("service.name").String()
if err != nil {
panic(err)
}
log.Println("GET service.name: ", name)
}
运行:
go run .\main.go
2022-07-20T14:41:23.121+0800 INFO nacos_client/nacos_client.go:79 logDir:<./config/log> cacheDir:<./config/cache>
DEBUG msg=config loaded: defaulttest.yaml format: yaml
2022/07/20 14:41:23 GET service.name: config
三、完整代码地址
kratos 配置使用完整代码地址:
https://github.com/jiujuan/go-kratos-demos/tree/master/config
欢迎大家到我的公众号 九卷技术录,go-kratos 实战学习06:Nacos 配置中心使用 继续讨论
四、参考
- https://go-kratos.dev/docs/component/config/ config docs
- https://nacos.io/zh-cn/docs/what-is-nacos.html nacos 文档
- https://github.com/nacos-group/nacos-sdk-go nacos-sdk-go
- https://github.com/alibaba/nacos nacos源码
- https://github.com/hashicorp/consul
- https://github.com/apolloconfig/apollo
- https://github.com/etcd-io/etcd
Go微服务框架go-kratos实战学习06:配置中心使用-nacos作为配置中心和 file作为配置存储的更多相关文章
- 微服务框架SpringCloud(Dalston版)学习 (一):Eureka服务注册与发现
eureka-server eureka服务端,提供服务的注册与发现,类似于zookeeper 新建spring-boot工程,pom依赖: <dependency> <groupI ...
- 抛弃go-micro,使用极简微服务框架Bull
简介 Bull是一款基于GO语言的极简微服务框架. 使用GRPC作为RPC协议,使用ETCD作为注册中心. 框架目前已经实现了服务注册.服务发现(客户端轮训)功能. 整体架构 代码地址 https:/ ...
- kratos微服务框架学习笔记一(kratos-demo)
目录 kratos微服务框架学习笔记一(kratos-demo) kratos本体 demo kratos微服务框架学习笔记一(kratos-demo) 今年大部分时间飘过去了,没怎么更博和githu ...
- go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])
目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ...
- # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)
目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...
- go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer)
目录 go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer) demo demo server demo client 池 dao service p2c ro ...
- go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用)
目录 go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用) warden direct demo-server gr ...
- go微服务框架kratos学习笔记八 (kratos的依赖注入)
目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...
- go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)
目录 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin) zipkin使用demo 数据持久化 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin ...
- go微服务框架kratos学习笔记十(熔断器)
目录 go微服务框架kratos学习笔记十(熔断器) 什么是熔断 熔断器逻辑 kratos Breaker kratos 熔断逻辑 kratos熔断器使用说明 bladmaster client br ...
随机推荐
- 常见的docker hub mirror镜像仓库
阿里云(杭州) https://registry.cn-hangzhou.aliyuncs.com 阿里云(上海) https://registry.cn-shanghai.aliyuncs.com ...
- [转帖]s3fs把 s3-like 对象存储挂载到本地
s3fs把 s3-like 对象存储挂载到本地 s3fs把 s3-like 对象存储挂载到本地 s3fs-fuse 是一个采用 c++ 开发的开源应用,它的作用是可以将 AWS S3 以及兼容 S3 ...
- [转帖]mysql8.0的RPM方式安装
https://www.cnblogs.com/asker009/p/15072354.html 1. 下载 https://dev.mysql.com/downloads/ 使用wget下载yum的 ...
- [转帖]VMWare ESXi中,不同的虚拟网卡性能竟然能相差三倍!
https://zhuanlan.zhihu.com/p/525656364 正文共:1024 字 11 图,预估阅读时间:1 分钟 在上个实验中(VPP使用DPDK纳管主机网卡),我们已经初步实现了 ...
- [转帖]Sosreport:收集系统日志和诊断信息的工具
https://zhuanlan.zhihu.com/p/39259107 如果你是 RHEL 管理员,你可能肯定听说过 Sosreport :一个可扩展.可移植的支持数据收集工具.它是一个从类 Un ...
- 银河麒麟v10 安装 virt-manager 的过程
上个月公司购置一台飞腾2000+ 银河麒麟v10的机器. 想着能够利用虚拟化 安装一下虚拟机 提高测试灵活度 找了一下原厂要了一下相关的命令 在这里进行一下测试工作. 第一步: 安装必备的包 yum ...
- .Net Core 3.1浏览器后端服务(二) Web API项目分层
一.前言 分层开发的思想在计算机领域中至关重要,从操作系统到软件设计,分层思想无处不在. 在搭建项目的分层结构前,先简单了解下分层的优缺点.如下图,分为(呈现层.业务层.服务层.数据层) 分层的优点: ...
- 你还在“垃圾”调优?快来看看JDK17的ZGC如何解放双手 | 京东云技术团队
1.前言 不要犹豫了,GC最大停顿时间小于1ms,支持16TB内存,这么高的性能提升,也不需要复杂的调优,节省了这个时间,你去陪对象不香嘛. 上篇文章给大家带来了JDK11升级JDK17的最全实践,相 ...
- 解锁前端新潜能:如何使用 Rust 锈化前端工具链
前言 近年来,Rust的受欢迎程度不断上升.首先,在操作系统领域,Rust 已成为 Linux 内核官方认可的开发语言之一,Windows 也宣布将使用 Rust 来重写内核,并重写部分驱动程序. ...
- ToneGenerator Init failed Crash 崩溃
需求需要在扫码时产生一个短促的提示音, 搜了下像这样实现.测试时发现多次扫码后,会触发程序崩溃问题. 异常如下 java.lang.RuntimeException: Init failed at a ...