一、kratos 配置介绍

配置文件的作用就是把一些会变化的配置项单独存放,与程序相剥离。

把配置项进行单独管理。

kratos 支持多种形式的配置,

比如 file,环境变量。

还支持一些配置软件,比如:

等等。

它也支持多种格式,比如 json、yaml、proto、xml 等。

katos 还支持热更新功能

kratos 中的 config 热更新功能,可以在服务不重新发布、不停机、不重启情况下,在线更新服务配置,修改服务行为。

二、基本使用步骤

go-kratos: v2.4.0

Go: v1.17.10

基本使用步骤

  1. 初始化配置源:解析的配置项数据源来自 file,还是配置软件里存储的数据。
  2. 读取配置值

例子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 的安装这里就不介绍了,请查看安装文档

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 配置中心使用 继续讨论

四、参考

Go微服务框架go-kratos实战学习06:配置中心使用-nacos作为配置中心和 file作为配置存储的更多相关文章

  1. 微服务框架SpringCloud(Dalston版)学习 (一):Eureka服务注册与发现

    eureka-server eureka服务端,提供服务的注册与发现,类似于zookeeper 新建spring-boot工程,pom依赖: <dependency> <groupI ...

  2. 抛弃go-micro,使用极简微服务框架Bull

    简介 Bull是一款基于GO语言的极简微服务框架. 使用GRPC作为RPC协议,使用ETCD作为注册中心. 框架目前已经实现了服务注册.服务发现(客户端轮训)功能. 整体架构 代码地址 https:/ ...

  3. kratos微服务框架学习笔记一(kratos-demo)

    目录 kratos微服务框架学习笔记一(kratos-demo) kratos本体 demo kratos微服务框架学习笔记一(kratos-demo) 今年大部分时间飘过去了,没怎么更博和githu ...

  4. go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时])

    目录 go微服务框架kratos学习笔记五(kratos 配置中心 paladin config sdk [断剑重铸之日,骑士归来之时]) 静态配置 flag注入 在线热加载配置 远程配置中心 go微 ...

  5. # go微服务框架kratos学习笔记六(kratos 服务发现 discovery)

    目录 go微服务框架kratos学习笔记六(kratos 服务发现 discovery) http api register 服务注册 fetch 获取实例 fetchs 批量获取实例 polls 批 ...

  6. go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer)

    目录 go微服务框架kratos学习笔记七(kratos warden 负载均衡 balancer) demo demo server demo client 池 dao service p2c ro ...

  7. go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用)

    目录 go微服务框架kratos学习笔记四(kratos warden-quickstart warden-direct方式client调用) warden direct demo-server gr ...

  8. go微服务框架kratos学习笔记八 (kratos的依赖注入)

    目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...

  9. go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin)

    目录 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin) zipkin使用demo 数据持久化 go微服务框架kratos学习笔记九(kratos 全链路追踪 zipkin ...

  10. go微服务框架kratos学习笔记十(熔断器)

    目录 go微服务框架kratos学习笔记十(熔断器) 什么是熔断 熔断器逻辑 kratos Breaker kratos 熔断逻辑 kratos熔断器使用说明 bladmaster client br ...

随机推荐

  1. [转帖]关于面试时HA(RAC)会问到的一些问题

    1.什么是RAC(Real Application Cluster)? RAC(Real Application Cluster)是Oracle数据库的一种部署架构,它将多个数据库服务器连接在一起,共 ...

  2. [转帖]TiDB 6.1 单机环境 On openEular 2003 SP3

    https://tidb.net/book/book-rush/best-practice/other-practice/tidb61-on-openEular2003 背景​ 最近对国产操作系统很感 ...

  3. [转帖]CentOS7安装笔记:minio分布式集群搭建

    文章目录 准备机器 部署(所有机器均执行) 创建挂载磁盘路径 挂载磁盘路径到文件系统 创建minio目录 下载minio安装包 创建启动脚本 创建启动服务 启动测试(所有机器执行) 重新加载服务的配置 ...

  4. [转帖]10--k8s之数据持久化

    https://www.cnblogs.com/caodan01/p/15136217.html 目录 一.emptDir 二.hostPath 三.pv 和 pvc 1.环境准备 2.创建pv 3. ...

  5. [转帖]聊聊我对 GraphQL 的一些认知

    https://www.modb.pro/db/139451 作者简介:haohongfan 是 Apache Dubbogo Committer,目前就职于京东,擅长高并发架构设计.公众号 HHFC ...

  6. [转帖]rsync参数详解

    最近经常需要传送文件,学习到rsync这个非常好用的工具.rsync的传输方不像是scp复制粘贴,而是是创建一个镜像,所以在传输效率上比scp命令要快很多,缺点就是对文件的属性如权限.用户.组.时间戳 ...

  7. 快捷方式 ABP——切换MySQL数据库

    当基于ABP开发一段时间后,切换数据库可以使用快捷方式 方法如下: 第一步: 前提是要知道所使用的数据库的版本 1. vs 2017需要点击XXX.XXX.EntityFrameworkCore,右键 ...

  8. 从零开始配置 vim(12)——主题配置

    在我们进一步增强vim的功能之前,我们先为vim准备一个漂亮的主题,毕竟对着一个丑陋原始的界面多少有点提不起劲来进行编程.长时间对着丑陋的界面多多少少会产生抑郁情绪的.下面推荐几款我觉得还不错的主题插 ...

  9. k8s 中的网络

    k8s 中的网络模型 CNI 网络插件 CNI 的设计思想 k8s 中的三层网络 Flannel 的 host-gw Calico 参考 k8s 中的网络模型 CNI 网络插件 docker 容器的网 ...

  10. 精进语言模型:探索LLM Training微调与奖励模型技术的新途径

    精进语言模型:探索LLM Training微调与奖励模型技术的新途径 LLMs Trainer 是一个旨在帮助人们从零开始训练大模型的仓库,该仓库最早参考自 Open-Llama,并在其基础上进行扩充 ...