基于kitex和hertz的微服务demo搭建(中)| 青训营笔记

314 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 9 天,记录一下基于 kitex 和 hertz 的微服务 demo 搭建流程。

简介

上一篇主要讲了技术选型和模块划分,本文主要讲解 nacos 作为注册中心和配置中心与 kitex 相结合。

什么是 nacos

Nacos /nɑ:kəʊs/ 是 Dynamic Naming and Configuration Service的首字母简称,一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。

关于 nacos 的部署与配置持久化可以参考官方文档,此处不做介绍。

Nacos 作为注册中心
引入依赖

Kitex 的服务发现功能提供了对 nacos 的支持,需要引入 registry-nacos 依赖。

 go get -u github.com/kitex-contrib/registry-nacos
构建 nacos 客户端(NamingClient)

由于 registry-nacos 底层是基于 nacos-sdk-go v1.1.2 的,因此该部分的代码可以参考其官方文档

配置 nacos 服务端地址

 sc := []constant.ServerConfig{
     *constant.NewServerConfig("127.0.0.1", 8848),
 }

初始化 nacos 客户端配置

 cc := &constant.ClientConfig{
     NamespaceId:    "public",   // 命名空间Id
     TimeoutMS:      10000,      // 请求Nacos服务端的超时时间,默认是10000ms
     Username:       "nacos",    // Nacos服务端的API鉴权Username
     Password:       "nacos",    // Nacos服务端的API鉴权Password
 }

创建 nacos 客户端

 Client, err := clients.NewNamingClient(vo.NacosClientParam{
     ClientConfig: cc,
     ServerConfigs: sc,
 })
注册 rpc 服务端

这里使用了上一篇提到的 idl 模块中 hello 模块的相关代码(由 kitex 代码生成工具生成),创建了一个 rpc 服务端,并设置了服务的注册名为 HelloRpcService,通过上一步构建的 nacos 客户端完成注册。

 import (
     "github.com/cloudwego/kitex/pkg/rpcinfo"
     "github.com/cloudwego/kitex/server"
     "github.com/joker-star-l/service_demo_idls/hello/kitex_gen/api/hello"
     "github.com/kitex-contrib/registry-nacos/registry"
 )
 ​
 ...
 svr := hello.NewServer(
     new(HelloImpl),
     server.WithServerBasicInfo(&rpcinfo.EndpointBasicInfo{ServiceName: "HelloRpcService"}),
     server.WithRegistry(registry.NewNacosRegistry(Client)),
 )
注册 http 服务端

设置 http 服务注册名为 HelloService,通过上一步构建的 nacos 客户端完成注册。

 success, err := Client.RegisterInstance(vo.RegisterInstanceParam{
     Ip:          "127.0.0.1",
     Port:        8080,
     Weight:      10,
     Enable:      true,
     Healthy:     true,
     ServiceName: "HelloService",
     Ephemeral:   true,
 })
Nacos 作为配置中心
编写配置

在 nacos 中编写一个名为 HelloService.json 的文件,当作该服务的配置文件。

构建 nacos 客户端(ConfigClient)
 ConfigClient, err = clients.NewConfigClient(vo.NacosClientParam{
     ClientConfig: cc,
     ServerConfigs: sc,
 })
读取配置
 configParam := vo.ConfigParam{
     DataId: "HelloService.json",
     Group:  "DEFAULT_GROUP",
 }
 conf, err := ConfigClient.GetConfig(configParam)
监听配置

注册监听器,当 nacos 上的配置文件发生改变时,会执行 OnChange 函数。其中 data 参数代表文件的最新数据。

 err = ConfigClient.ListenConfig(vo.ConfigParam{
     DataId: configParam.DataId,
     Group: configParam.Group,
     OnChange: func(namespace, group, dataId, data string) {
         if group == configParam.Group && dataId == configParam.DataId {
             ... // 具体逻辑
         }
     },
 })