引言
上篇介紹了如何使用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服務的訂閱者列表,服務發現注冊功能就可以正常使用了
如有錯誤請留言反饋