前面《kratos微服务实战(九)kratos项目之注册到nacos的服务之间相互调用》我们再go-kratos中集成了nacos作为注册中心,本文我们再演示下再go-kratos中集成配置中心。
这里要特别注意的是在go-kratos中注册到nacos和配置nacos的配置中心是分开独立的,所以这里是需要写两遍连接nacos代码的。下面开始演示:
一、nacos配置准备
既然要使用nacos作为配置中心,首先就需要在nacos中把配置给配置起来,
1、点击nacos的配置惯例->配置列表
2、选择对应的名称空间
3、创建一个名称为user.yaml的配置
在这个user.yaml文件中填写如下的值:
app: name: test version: 1.0.0.1
以上我们的配置文件就准备好了。
2、修改配置文件
这里配置中心的话,我们需要把nacos配置相关的信息给添加进去,所以这里修改configs/config.yaml文件,那nacos的group和dataid再增加进去
nacos: addr: 192.168.1.249 port: 8848 namespaceId: 0153af57-1fb8-43ef-bfe5-1212e6b43db2 dataId: user.yaml groupId: DEFAULT_GROUP
当然这里我们就不需要修改internal/conf/conf.proto了,因为我们不需要给他注册进去,如果进行注册的话,后续的代码量有点多,这里我们采取configutils的形式来完成。(当然有个人代码要求的,也可以修改conf.proto,再便宜个新的)
三、安装依赖
这里由于采用configutils的形式,所以这里我们需要安装下读取文件和读取nacosconfig的依赖
go get github.com/spf13/viper go get github.com/go-kratos/kratos/contrib/config/nacos/v2
四、编写nacos config文件
这里我们在internal/config文件夹下创建一个文件夹nacos,再在nacos文件夹下创建一个nacos.go文件,我们的nacos配置读取的utils就准备写在这里
接着我们向这个文件编写nacos读取config的utils实现,主要是以下几步:
1、声明nacos的一些变量 2、编写方法,读取configs/config.yaml文件中nacos的信息,把值赋予给对应变量 3、编写方法,初始化nacos的对应连接,监听文件 4、编写方法,获取读nacos config的读取流
具体的实例代码如下:
package nacos import ( knacos "github.com/go-kratos/kratos/contrib/config/nacos/v2" "github.com/go-kratos/kratos/v2/config" "github.com/go-kratos/kratos/v2/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" "github.com/spf13/viper" ) /* * 声明nacos的一些变量 */ var ( nacosConfig config.Config //远程配置中心实例 nacosIp string //nacosip地址 nacosPort uint64 //nacos端口 nacosNameSpaceId string //当前服务名称空间 nacosDataId string //nacos配置的DataID nacosGroup string //nacos配置的group分组 ) /* * 创建文件流,读取nacos的配置信息 */ func readConfig() { localConfig := viper.New() //新建本地配置中心实例 localConfig.SetConfigFile("..\\..\\configs\\config.yaml") //指定本地配置文件 //读取配置文件 if err := localConfig.ReadInConfig(); err != nil { panic(err) } nacosIp = localConfig.GetString("data.nacos.addr") nacosPort = localConfig.GetUint64("data.nacos.port") nacosNameSpaceId = localConfig.GetString("data.nacos.namespaceId") nacosDataId = localConfig.GetString("data.nacos.dataId") nacosGroup = localConfig.GetString("data.nacos.groupId") } /* * 创建nacos连接 */ func InitNacosConfig() (c config.Config) { //初始化读取配置文件 readConfig() sc := []constant.ServerConfig{ *constant.NewServerConfig(nacosIp, nacosPort), } cc := &constant.ClientConfig{ NamespaceId: nacosNameSpaceId, TimeoutMs: 5000, NotLoadCacheAtStart: true, LogDir: "tmp/nacos/log", CacheDir: "tmp/nacos/cache", LogLevel: "debug", } client, err := clients.NewConfigClient( vo.NacosClientParam{ ClientConfig: cc, ServerConfigs: sc, }, ) if err != nil { panic(err) } c = config.New( config.WithSource( knacos.NewConfigSource(client, knacos.WithGroup(nacosGroup), knacos.WithDataID(nacosDataId), ))) if err := c.Load(); err != nil { panic(err) } return c } /** 其他文件获取nacos config读取流的公共方法 */ func GetConfig() config.Config { if nacosConfig == nil { log.Info("准备初始化nacos读取配置") nacosConfig = InitNacosConfig() } return nacosConfig }
五、读取nacos配置信息
接下来我们只需要在需要读取nacos配置信息的地方调用这里的GetConfig方法即可,例如我们在前面的internal/service/account.go文件中的login方法里面调用获取nacos上面配置的appname和version值,调用效果如下:
appname, err := nacos.GetConfig().Value("app.name").String() version, err := nacos.GetConfig().Value("version").String()
上面我们在实际写代码的时候我会忽略掉获取的error(go里面到处是error的判断,让go的代码看起来非常复杂,所以一般不用的话就忽略掉即可),使用_替代了。
六、运行测试
最后我们把项目运行起来测试看看效果,在调用之后,可以很直观的看到打印的日志是获取到了nacos的信息了
这里控制台没显示完,实际中大家可以直接测试,还有如果在nacos上修改了最新的值之后
调用获取的值也是最新的
以上就是在go-kratos中集成nacos配置中心的案例,最后按照惯例,附上本案例的源码,登陆后即可下载。
发表评论