引言

上篇介绍了如何使用nacos作为配置管理中心,并使用viper来解析配置
官方介绍nacos不仅可以用来做配置中心还支持服务注册、发现以及动态DNS服务功能

使用姿势

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