一、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. [转帖]探索惊群 ④ - nginx - accept_mutex

    https://wenfh2020.com/2021/10/10/nginx-thundering-herd-accept-mutex/   由主进程创建的 listen socket,要被 fork ...

  2. 【转帖】eBay 云计算“网”事:网络超时篇

    https://www.infoq.cn/article/JmCbkA0XX9NqrcX6loIo eBay技术荟 2020-06-19 本文字数:5508 字 阅读完需:约 18 分钟 导读 eBa ...

  3. [转帖]Linux系统硬链接和软链接具体实例讲解(超详细)

    简介 在 Linux 中,元数据中的 inode 号(inode 是文件元数据的一部分但其并不包含文件名,inode 号即索引节点号)才是文件的唯一标识而非文件名.文件名仅是为了方便人们的记忆和使用, ...

  4. [转帖]磁盘负载指标 %iowait, await, %util 的正确理解

    说明 %iowait, await, %util 是用来衡量硬盘负载的三个指标, 但是这几个指标通常容易被误解, 实际上, 这三个指标单纯的高, 并不一定能说明相应的磁盘有问题或者有瓶颈, 而是需要结 ...

  5. TCP内核参数与Nginx配置的简单测试

    背景 昨天晚上整理了下几个TCP内核的参数. 学习到了一点内核参数的影响. 但是因为时间比较晚了没有继续钻研与nginx的关系 今天想着继续研究一下TCP的部分参数与nginx的关系 每个系统都不一样 ...

  6. Linux下面rsync 实现 完全一致的同步方法

    1. 在某些特殊的linux机器上面, 比如龙芯后者是飞腾服务器,部分工具不太好用, 需要使用x86弄好之后进行同步过去, 这个时候scp 最简单但是网络流量非常大, 不如使用rsync, rsync ...

  7. 公司内部自建DNS的办法 使用私有域名的方法

    最近总是有一个需求,需要自己弄一些服务器域名之类的. 修改hosts总是比较麻烦,所以想了一个简单办法, 自己搭建一个dns服务器, 本来想用最简单的 dnsmasq 但是发现总是不成功, 然后找了另 ...

  8. 计划任务方式定期获取jvm dump的方法

    说明 产品最近有一些问题,想着能够每隔一段时间抓取一下dump文件. 需求 可以定期抓取, 需要注意磁盘空间的使用. 实现方法 定时任务使用 crontab 计划任务来做 预定义获取jvm dump的 ...

  9. 如何写RN样式 如何写RN组件 如何满屏 如何使用变量

    app.js 文本水平居中了哈 控制文本的大小 字体颜色等 只有在文本元素上去控制哈 import React from 'react'; import {View, Text, StyleSheet ...

  10. 兄弟组件互相传递值-this.$bus.$emit与this.$bus.$on

    B组件向C组件传递一个值. 一种组件间通信的方式, 适用于任意的组件间通信. 适用于任意的组件间通信. 适用于任意的组件间通信. 通过this.$bus.$emit('事件名',数据)进行提供数据 通 ...