go微服务框架Kratos笔记(五)使用nacos作为服务注册和服务发现中心
引言
上篇介绍了如何使用nacos作为配置管理中心,并使用viper来解析配置
官方介绍nacos不仅可以用来做配置中心还支持服务注册、发现以及动态DNS服务功能
nacos的安装
根据文档启动一个nacos
nacos快速开始
服务注册使用姿势
在data中引入nacos服务
//使用wire注入的方式将nacos客户端注入到服务发现和服务注册
var ProviderSet = wire.NewSet(NewNacosConf, NewDiscovery, NewRegistrar)
// NewNacosConf 初始化nacos客户端服务
func NewNacosConf() vo.NacosClientParam {
localConfig := config.ThisConf()
sc := []constant.ServerConfig{
*constant.NewServerConfig(localConfig.GetString("nacos.ip"), localConfig.GetUint64("nacos.prot")),
}
cc := &constant.ClientConfig{
NamespaceId: localConfig.GetString("nacos.namespaceId"),
TimeoutMs: localConfig.GetUint64("nacos.timeoutMs"),
NotLoadCacheAtStart: localConfig.GetBool("nacos.notLoadCacheAtStart"),
LogDir: localConfig.GetString("nacos.logDir"),
CacheDir: localConfig.GetString("nacos.cacheDir"),
RotateTime: localConfig.GetString("nacos.rotateTime"),
MaxAge: localConfig.GetInt64("nacos.maxAge"),
LogLevel: localConfig.GetString("nacos.logLevel"),
}
return vo.NacosClientParam{
ClientConfig: cc,
ServerConfigs: sc,
}
}
// NewDiscovery nacos服务发现注入
func NewDiscovery(param vo.NacosClientParam) registry.Discovery {
client, err := clients.NewNamingClient(param)
if err != nil {
panic(err)
}
return nacos.New(client)
}
// NewRegistrar 服务注册业务注入
func NewRegistrar(param vo.NacosClientParam) registry.Registrar {
client, err := clients.NewNamingClient(param)
if err != nil {
panic(err)
}
return nacos.New(client)
}
在main函数中注册服务
func newApp(logger log.Logger, hs *http.Server, gs *grpc.Server, r registry.Registrar) *kratos.App {
return kratos.New(
kratos.ID(id),
kratos.Name(Name),
kratos.Version(Version),
kratos.Metadata(map[string]string{}),
kratos.Logger(logger),
kratos.Server(
hs,
gs,
),
kratos.Registrar(r),
)
}
注册之后查看nacos发现已经正常注册上去
服务发现使用姿势
在data中编写服务发现方法
func NewUserServiceClient(r registry.Discovery, logger log.Logger) userv1.UserClient {
conn, err := grpc.DialInsecure(
context.Background(),
grpc.WithEndpoint("discovery:///Microservice.USER.grpc"),
grpc.WithDiscovery(r),
grpc.WithMiddleware(
recovery.Recovery(),
logging.Client(logger), //日志中间件,
),
)
if err != nil {
panic(err)
}
return userv1.NewUserClient(conn)
}
启动服务后可以看到控制台输出服务的实例信息
INFO msg=[resolver] update instances: [{"id":"192.168.1.22#9992#DEFAULT#DEFAULT_GROUP@@Microservice.USER.grpc","name":"DEFAULT_GROUP@@Microservice.USER.grpc","version":"v1","metadata":{"kind":"grpc","version":"v1"},"endpoints":["grpc://192.168.1.22:9992"]}]
查看nacos服务的订阅者列表,服务发现注册功能就可以正常使用了
如有错误请留言反馈