微服务之配置中心
为什么需要配置中心
- 添加配置项不方便,大量部署实例需要修改配置麻烦
- go使用viper能自动生效,不保证其他服务
- 开发、测试、生产的环境隔离
配置中心技术选型
目前主流有spring cloud config、apollo和nacos
apollo是协程开源,nacos是阿里开源
- Apollo大而全,功能完善。nacos小而全
- 部署nacos简单
- nacos不仅仅支持配置中心和支持服务注册和发现
- 都支持各种语言,不过apollo是第三方支持,nacos 是官方支持
功能点 |
apollo |
nacos |
开源时间 |
2016.5 |
2018.6 |
配置实时推送 |
支持(http长轮询) |
支持(http长轮询) |
配置回滚 |
支持 |
支持 |
灰度发布 |
支持 |
待支持 |
权限管理 |
支持 |
支持 |
多集群 |
支持 |
支持 |
监听查询 |
支持 |
支持 |
多语言 |
主流语言 |
主流语言(官方支持) |
通信协议 |
http |
http |
nacos
安装
docker run --name nacos-standlone -e MODE=standalone -e JVM_XMS=512m -e JVM_XMX=512m -e JVM_XMN=256m -p 8848:8848 -d nacos/nacos-server
|
基本概念
命名空间
配置集合,隔离分组
命令空间区分 微服务
组
不同微服务之间的,开发、测试、生产环境的区别使用
dataid
数据配置集
整合到gin
安装go-sdk
go get -u github.com/nacos-group/nacos-sdk-go/v2
|
获取到nacos的client
package initialize
import ( "encoding/json" "fmt" "github.com/nacos-group/nacos-sdk-go/v2/clients" "github.com/nacos-group/nacos-sdk-go/v2/common/constant" "github.com/nacos-group/nacos-sdk-go/v2/vo" "shop_api/user-web/global" )
func InitNacos() error { sc := []constant.ServerConfig{ { IpAddr: global.NacosConf.Host, Port: global.NacosConf.Port, }, }
cc := constant.ClientConfig{ NamespaceId: "c1872978-d51c-4188-a497-4e0cd20b97d5", TimeoutMs: 5000, NotLoadCacheAtStart: true, LogDir: "tmp/nacos/log", CacheDir: "tmp/nacos/cache", LogLevel: "debug", }
configClient, err := clients.CreateConfigClient(map[string]interface{}{ "serverConfigs": sc, "clientConfig": cc, }) if err != nil { panic(err) }
content, err := configClient.GetConfig(vo.ConfigParam{ DataId: global.NacosConf.DataID, Group: global.NacosConf.Group})
if err != nil { return err } err = json.Unmarshal([]byte(content), &global.AppConf) if err != nil { return err } fmt.Println(global.AppConf) return nil }
|
yaml
host: 192.168.28.145 port: 8848 nameSpace: 93e9005f-d1ec-4988-8586-332927badab0 user: nacos password: nacos dataID: user-srv.yaml group: dev
|