成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 語言微服務框架 Kratos 怎么讀取配置?

開發 前端
本文介紹了 Kartos 怎么使用 config 組件,讀取配置。通過示例代碼,分別介紹了讀取配置文件、環境變量和遠程配置中心 apolloconfig 的實現方式。

1.介紹

微服務框架 Kratos 提供了一個強大的配置管理模塊 - config 組件,它支持加載、解析、動態更新配置。

它支持多種配置源,例如文件(JSON、YAML、TOML 等格式)、環境變量、遠程配置中心(如 Apollo、Etcd)等。

2.config 組件

Kratos 的 config 組件的核心功能包括支持多種配置源、動態更新、類型安全、擴展性。

其中,類型安全是指通過結構體綁定,將配置數據加載到 Go 的結構體中;擴展性是指可以通過實現 config.Source 接口,擴展自定義配置源。

此外,它還有 config.Decoder 解析器接口,可以將配置內容解析為結構化數據;config.Loader 管理配置的核心組件,可以從多個配置源加載和合并配置。

3.配置源

我們通過示例代碼,分別介紹通過 config 組件管理的多種配置源。

文件

func init() {
 flag.StringVar(&flagconf, "conf", "../../configs", "config path, eg: -conf config.yaml")
}

func main() {
 flag.Parse()
 // 加載配置文件
 c := config.New(
  config.WithSource(
   file.NewSource(flagconf),
  ),
 )
 defer c.Close()

 // 加載配置
 if err := c.Load(); err != nil {
  panic(err)
 }

 // 獲取配置
 var bc conf.Bootstrap
 if err := c.Scan(&bc); err != nil {
  panic(err)
 }

 // ...
}

閱讀上面這段代碼,我們可以發現使用 config 組件讀取配置,總共需要三步,一是使用 config.New() 加載配置文件,返回一個 Config 接口,示例代碼中使用 file.NewSource() 獲取 blog/configs 目錄中的配置文件。

// Config is a config interface.
type Config interface {
 Load() error
 Scan(v interface{}) error
 Value(key string) Value
 Watch(key string, o Observer) error
 Close() error
}

二是使用 Load() 方法加載配置,也就是讀取配置內容。

三是使用 Scan() 方法獲取配置,也就是將配置內容解析為結構化數據。

需要注意的是,不要忘記執行 Close() 方法。

環境變量

使用 Karatos 的 config 組件讀取環境變量中的配置,只需要在 config.WithSource() 方法中,添加環境變量配置源。

// 加載配置文件
 c := config.New(
  config.WithSource(
   file.NewSource(flagconf),
   env.NewSource(),
  ),
 )
 defer c.Close()

讀取環境變量中的配置,一般不會使用 Scan() 方法,將獲取到的配置解析到結構體中。

一般是使用 Value() 方法,直接讀取鍵值對,例如:

// 讀取環境變量
 port, err := c.Value("PORT").String() // 讀取環境變量 PORT
 if err != nil || port == "" {
  port = "8080" // 默認值
 }
 fmt.Println("Port:", port)

 // 讀取其他配置
 dbHost, err := c.Value("DB_HOST").String() // 讀取環境變量 DB_HOST
 if err == nil {
  fmt.Println("Database Host:", dbHost)
 }

需要注意的是,使用 Value() 方法,讀取環境變量值,key 區分大小寫。

遠程配置中心

我們以 apolloconfig 為例,介紹怎么使用 Kartos 的 config 組件讀取遠程配置中心的配置。

首先,我們需要安裝依賴。

go get github.com/go-kratos/kratos/contrib/config/apollo/v2

因為 Kratos 為我們提供了讀取 apolloconfig 的依賴庫,所以我們只需使用依賴庫初始化 apolloconfig 配置源。

// 初始化 Apollo 配置源
 apolloSource := apollo.NewSource(
  apollo.WithEndpoint("http://192.168.110.209:8080"), // Apollo 服務地址
  apollo.WithAppID("SampleApp"),                      // 應用 ID
  apollo.WithCluster("default"),                      // 集群
  apollo.WithNamespace("application.properties"),     // Namespace
  apollo.WithEnableBackup(),                          // 啟用本地備份
 )

然后,將配置源 apolloSource,添加進去。

// 加載配置文件
 c := config.New(
  config.WithSource(
   file.NewSource(flagconf),
   env.NewSource(),
   apolloSource,
  ),
 )

最后,我們可以使用 Scan() 方法,解析到結構體中。也可以直接讀取鍵值,此處,我們以直接讀取鍵值為例,示例代碼:

timeout, err := c.Value("application.timeout").String()
 if err != nil {
  panic(err)
 }
 fmt.Printf("timeout: %s\n", timeout)

運行項目,輸出結果:

kratos run
timeout: 100

當然,我們每次修改配置時,都需要重啟項目,為了避免重啟項目,我們可以使用 Watch() 方法,動態監聽配置變化,示例代碼:

// 動態監聽配置變化
 err = c.Watch("application", myObserver)
 if err != nil {
  fmt.Println("Error watching config:", err)
  return
 }

閱讀上面這段代碼,我們可以發現 Watch() 方法的參數有 2 個,分別是 application 和 myObserver。

其中,application 是 apolloconfig 的 Namespace,myObserver 是監聽函數。

// Observer 函數
func myObserver(key string, value config.Value) {
 fmt.Printf("Config updated! Key: %s, New Value: %v\n", key, value.Load())
}

重新運行項目,每次修改 apolloconfig 中的配置,我們可以看到以下打印結果:

Config updated! Key: application, New Value: map[timeout:200]

4.總結

本文介紹了 Kartos 怎么使用 config 組件,讀取配置。

通過示例代碼,分別介紹了讀取配置文件、環境變量和遠程配置中心 apolloconfig 的實現方式。

當然,如果我們不想使用 Kartos 的 config 組件讀取 apolloconfig 配置,而是想使用 Viper 讀取 apolloconfig 配置。

可以使用 apolloconfig 的客戶端 API 或三方庫,比如:github.com/apolloconfig/agollo/v4,將 apolloconfig 的配置加載到 Viper 中。

限于篇幅,本文沒有介紹怎么使用 Viper 讀取 apolloconfig 中的配置,感興趣的讀者朋友們,可以自行嘗試實現。

責任編輯:武曉燕 來源: Golang語言開發棧
相關推薦

2024-12-23 00:22:55

2025-01-20 00:10:00

Go語言Kratos

2024-12-30 00:38:23

Go語言微服務

2025-01-06 00:00:01

KratosGo微服務

2021-07-26 11:19:43

微服務開發技術

2023-12-13 07:19:01

微服務架構Golang

2021-09-06 11:34:47

架構微服務Hystrix

2021-03-05 11:09:46

Go框架微服務

2018-01-22 11:50:30

華為云

2023-01-29 23:51:07

微服務框架Go

2024-04-09 07:27:06

微服務架構YAML

2022-03-22 09:22:21

Go kitgRPC網絡傳輸

2021-01-14 09:55:21

Java微服務Go

2018-12-13 09:00:23

GoogleGo微服務

2023-05-19 08:01:57

Go 語言map

2021-03-02 16:25:52

微服務架構技術

2023-02-17 18:06:33

微服務架構

2020-11-27 10:50:06

微服務架構框架

2022-09-05 08:48:16

微服務Spring配置中心

2022-03-08 09:09:08

Go塊讀取音視頻
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品波多野结衣 | 91精产国品一二三区 | 999视频| jizz亚洲人 | 欧美高清成人 | 97久久久久久久久 | 天天操 天天操 | 91传媒在线观看 | 欧美一区二区三区在线看 | 久久久久久精 | 97精品视频在线观看 | 999免费观看视频 | 精品国产18久久久久久二百 | 亚洲国产精品一区二区第一页 | av黄色免费在线观看 | 99爱免费| 久久激情视频 | 久久久久www | 欧美区在线 | 国产成人精品高清久久 | 久久精品99| 午夜精品久久久久久久久久久久 | 久久久精品影院 | 亚洲欧美中文日韩在线 | 欧美一区二区网站 | 九九激情视频 | 亚洲一级毛片 | 黄篇网址 | 孕妇一级毛片 | 久久久久国产精品一区二区 | 在线视频一区二区 | 日操操夜操操 | 国产精品乱码一区二三区小蝌蚪 | 欧美高清hd| 嫩草91在线| 91精品国产综合久久福利软件 | 超碰操| 精品一二三区 | 99久久精品国产一区二区三区 | 中文字幕一页二页 | 久久久久国产精品一区二区 |