Извините. Я узнал о go-micro и знаю, что клиенту микро-службы не нужно знать, на каком ip и порте развернут микро-сервис. Когда служба запускается сама, порт устанавливается случайным образом и службанаходится по имени службы, например go.micro.api.user
.
Сервисная сторона работает так:
userService := micro.NewService(micro.Name("go.micro.api.user"))
userService.Init()
user.RegisterUserHandler(userService.Server(), new(User), api.WithEndpoint(&api.Endpoint{
Name: "User.GetToken",
Path: []string{"/user/token/"},
Method: []string{"POST"},
Handler: http.Handler,
}),api.WithEndpoint(&api.Endpoint{
Name: "User.GetUserName",
Path: []string{"/user/username/"},
Method: []string{"GET"},
Handler: http.Handler,
}))
if er := userService.Run(); er != nil {
panic(er)
}
клиентская сторона:
service := micro.NewService(micro.Name("go.micro.api.user"))
service.Init()
// Create new greeter client
userService := user.NewUserService("go.micro.api.user", service.Client())
// Call the greeter
rsp, err := userService.GetToken(context.TODO(), &user.Request{Username: "John", Password: "123"})
if err != nil {
fmt.Println(err)
return
}
// Print response
fmt.Println(rsp)
Для развертывания микро сервисов в докере я не знаю, как настроитьпорт в контейнере докера.