1つのgrpc-gatewayに複数のAPI(gRPC)サーバーを繋ぐ
1つのgrpc-gatewayに複数サービス繋いで、認証は共通化するみたいなの作りたかったので調べてみました。
実装方法は簡単で、RegisterXXXXHandlerFromEndpoint
に渡すendpointを変えればいいだけでした。
package main import ( "flag" "net/http" "github.com/golang/glog" "github.com/grpc-ecosystem/grpc-gateway/runtime" "golang.org/x/net/context" "google.golang.org/grpc" gw_user "protocol/user" gw_cart"protocol/cart" ) var ( userEndpoint = flag.String("user_endpoint", "localhost:50051", "endpoint of YourService") cartEndpoint = flag.String("cart_endpoint", "localhost:50052", "endpoint of YourService") ) func run() error { ctx := context.Background() ctx, cancel := context.WithCancel(ctx) defer cancel() mux := runtime.NewServeMux() opts := []grpc.DialOption{grpc.WithInsecure()} // localhost:50051と通信する if err := gw_user.RegisterUserHandlerFromEndpoint(ctx, mux, *userEndpoint, opts); err != nil { return err } // localhost:50052と通信する if err := gw_cart.RegisterCartHandlerFromEndpoint(ctx, mux, *cartEndpoint, opts); err != nil { return err } return http.ListenAndServe(":8080", mux) } func main() { flag.Parse() defer glog.Flush() if err := run(); err != nil { glog.Fatal(err) } }