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发现已经正常注册上去
image

服务发现使用姿势

在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服务的订阅者列表,服务发现注册功能就可以正常使用了
image

如有错误请留言反馈

posted @ 2021-11-04 09:56  悠悠听风  阅读(2386)  评论(1编辑  收藏  举报