首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在 Golang 项目中使用 Spring Cloud Config Server 管理配置

引言

最近用 Go 写后端写得很开心,写篇比较实用的博客总结下如何通过 Spring Cloud Config Server 管理 Go 程序中的配置。 实现并不复杂,因此也可以很轻易地推广到其他语言的程序中。

先来说说为什么要做集中配置管理。在单体应用时代配置管理并不是什么大问题, 一般配置文件就和源码一起放在代码仓库中, 要查看或者修改直接到目录里找就完事儿了。但到了微服务时代,服务的数量比过去多了几十倍,再到茫茫多的代码仓库里找配置可就没这么简单了。因此我们需要一个能够统一查看修改配置,能够对配置进行版本控制的地方,这就是配置中心了。

在 Google 上搜索 "配置中心" 能找到不少不错的开源软件,但大部分都比较重,并且需要引入特定的客户端。这对没到那么大规模的中小团队来说未免太过折腾,因此反而像 Spring Cloud Config Server 这样的轻量级配置中心比较适合,几分钟就能跑起来, 而且和配置本身相关的功能也足够丰富了。

因此我们的架构就像下面这样:

Git: 储存具体的配置文件, 并且负责配置版本管理

Spring Cloud Config Server:提供配置的查询接口

Go App:从配置中心载入配置并使用

简单的搜索服务

作为演示我们用 Go 写一个很简单的搜索服务,只要访问服务就会把搜索引擎查到的结果展示出来,用 Go 实现只要一个文件。

main.go

接着把服务跑起来:

在浏览器中访问

很简单是不是?但这里的问题在于我们把写死在了代码中,如果要切换搜索引擎就得重新编译程序,真的是费时费力。 这时候我们就需要将配置解耦到配置文件中了。

配置文件

我们先在本地建一个配置文件

然后通过 viper 这个比较流行的配置库加载这个配置。

conf/conf.go

现在我们就把搜索引擎的地址解耦到配置文件中去了。

main.go

转移配置到云端

接下来我们将配置文件从本地转移到 Git 中,处于方便我就直接放在当前仓库的 config 分支中了。

地址为:https://github.com/GotaX/config-server-demo/tree/config

启动配置中心

配置文件上传完毕,我们再新开一个 config-server 空分支搭建配置中心。

首先到https://start.spring.io/页面新建一个 Java + Gradle 的 Spring Boot 工程,依赖项选 Config Server。

点击 "Generate Project" 将下载压缩包, 并解压。

修改 Application.java

修改 application.yml, 填入我们存放配置文件的仓库地址。

在工程根目录启动 config server。

访问查看配置。

这样我们的配置中心就启动完毕了。

在 Go 应用中读取配置

最后就是在应用中使用 Spring Cloud Config Server 中的配置了。如果是基于 Spring Boot 的应用可以直接使用加载配置。在 Go 中就需要稍微写点代码了,不过并不多。

我们先在 config.go 中添加一个函数,用来从配置中心读取配置:

conf/conf.go

当然,我们需要知道配置中心的入口,因此还需一个函数来初始化这些配置:

conf/conf.go

现在我们的函数变成了这样:

conf/conf.go

其中的可以让我们通过环境变量修改任意配置,因此中的配置也不是写死在代码中的了。其中比较常见的用法是通过环境变量来切换 profile。

最后我们希望 viper 仅在 conf 包中出现, 而对外隐藏我们加载配置的具体实现。 因此我们将配置读到结构体中再对外提供:

conf/conf.go

这时我们就可以从 main.go 中去掉调用了:

main.go

总结

我们通过 Git + Spring Could Config Server + Viper + 少量 Go 代码, 实现了基于配置中心的配置管理及使用

我们甚至可以在 Go 中使用类似于 Spring Boot 的 Profile 管理, 对比下:

http://localhost:8080/config/go-app-default.yml

http://localhost:8080/config/go-app-prod.yml

完整的代码可以参考https://github.com/GotaX/config-server-demo下的 3 个分支:

config: 配置文件

config-server: 配置中心

app: Go 应用

当然, 目前这种使用方式还比较简陋, 还有很多可以改进的地方, 比如:

结合 Spring Cloud Bus 实现配置的实时推送

结合 Spring Cloud Eureka 实现配置服务器的高可用

监听 SIGINT 和 SIGTERM 实现 Go 应用优雅退出

版权申明:内容来源网络,版权归原创者所有。除非无法确认,我们都会标明作者及出处,如有侵权烦请告知,我们会立即删除并表示歉意。谢谢。

Golang语言社区

游戏服务器架构丨分布式技术丨大数据丨游戏算法学习

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180712B1TO0E00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券