Go 使用阿里 nacos 管理服务注册和发现,思路 Demo
连接 nacos
func InitNacos() *nacosRF {//return &nacosRF{}
d := &nacosRF{}
clientConfig := constant.ClientConfig{
TimeoutMs: 5000,
NotLoadCacheAtStart: true,
LogDir: "./log",
CacheDir: "./cache",
LogLevel: "debug",
}
serverConfigs := []constant.ServerConfig{
{
IpAddr: "127.0.0.1",
ContextPath: "/nacos",
Port: 8848,
Scheme: "http",
},
}
var err error
d.client, err = clients.NewNamingClient(
vo.NacosClientParam{
ClientConfig: &clientConfig,
ServerConfigs: serverConfigs,
},
)
if err != nil {panic(err)
}
NacosInstance = d
return d
}
注册服务
func (this *nacosRF) Register(serverName string, port int) {ok, err := InitNacos().client.RegisterInstance(vo.RegisterInstanceParam{Ip: utils.GetIp(),
Port: uint64(port),
Weight: 10,
Enable: true,
Healthy: true,
Metadata: map[string]string{},
ClusterName: "DEMO_SERVER",
ServiceName: serverName,
GroupName: "DEMO_SERVER_GROUP",
Ephemeral: true,
})
if err != nil {panic(err)
}
if !ok {logger.Info(" 注册本服务发生错误 ")
panic(errors.New(" 注册本服务发生错误 "))
}
}
nacosRF.NacosInstance.Register("demo", 8300)
服务发现
//FindInstance 获取某个服务器连接信息
func (this *nacosRF) FindInstance(serverName string) (*ServerInfo, error) {ins, err := InitNacos().client.SelectOneHealthyInstance(vo.SelectOneHealthInstanceParam{Clusters: []string{"DEMO_SERVER"},
ServiceName: serverName,
GroupName: "DEMO_SERVER_GROUP",
})
if err != nil {return nil, err}
return &ServerInfo{
Ip: ins.Ip,
Port: ins.Port,
ServerName: ins.ServiceName,
}, nil
}
func GetDemoOrderService(serviceName string) pb.RpcDemoServiceClient {info, err := nacosRF.NacosInstance.FindInstance(serviceName)
if err != nil {return nil}
c, err := grpc.Dial(fmt.Sprintf("%s:%d", info.Ip, info.Port), grpc.WithInsecure())
if err != nil {return nil}
p := pb.NewRpcDemoServiceClient(c)
return p
}
客户端调用
func main() {demoClient := service.GetDemoOrderService("demo")
result, err := demoClient.GetUserInfo(context.Background(), &pb.GetUserInfoRequest{Id: 10,})
//
if err != nil {panic(err)
}
fmt.Println(result)
}
正文完