Я уверен, что все службы работают нормально.
У меня есть код ниже:
Этот фрагмент используется для регистрации двух конечных точек.
func RegisterEndpoints(ctx context.Context, c *utils.AppConfig, r resolver.Builder) (http.Handler, error) {
var err error
mux := runtime.NewServeMux()
dialOpts := []grpc.DialOption{grpc.WithBalancerName("round_robin"), grpc.WithInsecure()}
err = protos.RegisterUserCenterHandlerFromEndpoint(ctx, mux, r.Scheme()+"://author/user-center", dialOpts)
if err != nil {
return nil, err
}
err = protos.RegisterSsoHandlerFromEndpoint(ctx, mux, r.Scheme()+"://author/sso", dialOpts)
if err != nil {
return nil, err
}
return mux, nil
}
И в моем main.go
build я создаю преобразователь для преобразования имени в адрес, затем регистрирую две конечные точки и прослушиваю порт 8080.
func run() error {
c := utils.GetAppConfig()
ctx := context.Background()
ctx, cancel := context.WithCancel(ctx)
defer cancel()
r := localresolver.NewResolver(fmt.Sprintf("%s:%d", c.Registry.Host, c.Registry.Port))
resolver.Register(r)
mux := http.NewServeMux()
// Register endpoints here
gw, err := routes.RegisterEndpoints(ctx, c, r)
if err != nil {
return err
}
mux.Handle("/", gw)
fmt.Println("Listening localhost:8080...")
return http.ListenAndServe(fmt.Sprintf("%s:%d", c.Gateway.Host, c.Gateway.Port), mux)
}
func main() {
defer glog.Flush()
if err := run(); err != nil {
glog.Fatal(err)
}
}
Но после того, как я запустил go run main.go
, Я обнаружил, что доступен только последний зарегистрированный мной сервис, то есть sso
сервис (строка err = protos.RegisterSsoHandlerFromEndpoint(ctx, mux, r.Scheme()+"://author/sso", dialOpts)
).
Может кто-нибудь показать мне пример правильного способа регистрации нескольких конечных точек через grpc-gateway
? (сделать так, чтобы все службы, зарегистрированные с grpc-gateway
, могли быть успешно посещены)
[2020-01-31] Нужна дополнительная помощь, теперь мой код подобен приведенному ниже:
Другие коды такие же, как и раньше.
Дополнительно, это результат, который показывает преобразователь имен: