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

如有錯誤請留言反饋


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM