一、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. SPEC2006的学习与总结

    SPEC2006的学习与总结 摘要 最近特别想进行一些性能验证工作. 所以研究了spec2006 然后想整理一下之前的内容. 想着将内容整理一下. 这次主要是抄别人的. 知识来源: https://b ...

  2. linux中如何统计千万个文件总和

    很简单.很简单.很简单.重要事情说三遍 命令:ls | grep '匹配信息' | wc -l ls查看该目录下的所有文件,果然隐藏文件也要匹配上的话,需要:ls -a grep匹配,如查看文件中有. ...

  3. git撤销推送到远端仓库的提交commit信息

    场景描述 有些时候,我们完成功能后,高兴的推送到远端. 推送到远端之后,我们才发现写错分支了. 这个时候,一万匹马在在内心奔腾而过. 然而,难受是没有用的,我们需要撤销推送到远端的代码 git log ...

  4. 人均瑞数系列,瑞数 4 代 JS 逆向分析

    声明 本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容.敏感网址.数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 本文章未经许 ...

  5. Golang并发控制方式有几种?

    Go语言中的goroutine是一种轻量级的线程,其优点在于占用资源少.切换成本低,能够高效地实现并发操作.但如何对这些并发的goroutine进行控制呢? 一提到并发控制,大家最先想到到的是锁.Go ...

  6. 5.14 汇编语言:仿写Switch选择结构

    选择结构,也称为switch语句,是计算机编程中的一种控制结构,用于根据表达式的值选择不同的执行路径.它允许程序根据表达式的值来决定执行哪个代码块,从而实现多分支选择逻辑.switch语句由一个表达式 ...

  7. C++ Boost库 实现命令行解析

    Boost库中默认自带了一个功能强大的命令行参数解析器,以往我都是自己实现参数解析的,今天偶尔发现这个好东西,就来总结一下参数解析的基本用法,该库需要引入program_options.hpp头文件, ...

  8. 从嘉手札<2023-11-18>

    随便补一个~ 1.我也不是不快乐,我其实挺快乐的,和朋友出去玩,看电影,刷搞笑视频,我都能表现的很好,但这些都不是真正让我感受到快乐的东西,它就像膝跳反应一样,碰我一下我就会笑,但笑完就结束了.甚至在 ...

  9. 万字剖析OpenFeign整合Ribbon实现负载均衡的原理

    大家好,前面我已经剖析了OpenFeign的动态代理生成原理和Ribbon的运行原理,这篇文章来继续剖析SpringCloud组件原理,来看一看OpenFeign是如何基于Ribbon来实现负载均衡的 ...

  10. Spring自带的这11个工具类,真香!

    前言 最近有些小伙伴,希望我分享一些好用的工具类,帮他们提升开发效率. 今天这篇文章专门跟大家一起总结一下,Spring框架本身自带的一些好用的工具类,希望对你会有所帮助. 1 Assert 很多时候 ...