BETA

1つのgrpc-gatewayに複数のAPI(gRPC)サーバーを繋ぐ

投稿日:2018-10-14
最終更新:2018-10-24
※この記事は外部サイト(http://hikouki.hateblo.jp/entry/2018/01/18...)からのクロス投稿です

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)
    }
}
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@hikouki'の技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!