亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何通過 grpc-gateway 處理多個端點?

如何通過 grpc-gateway 處理多個端點?

Go
紅顏莎娜 2022-05-05 18:13:48
我確定所有服務都正常運行。我有以下代碼:此代碼段用于注冊兩個端點。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,我構建了一個解析器來解析名稱到地址,然后注冊兩個端點并監聽端口 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發現只能訪問我注冊的最后一個服務,也就是ssoservice(err = protos.RegisterSsoHandlerFromEndpoint(ctx, mux, r.Scheme()+"://author/sso", dialOpts)行)。任何人都可以向我展示通過注冊多個端點的正確方法的示例grpc-gateway嗎?(使注冊的所有服務grpc-gateway都可以成功訪問)
查看完整描述

2 回答

?
眼眸繁星

TA貢獻1873條經驗 獲得超9個贊

無需將ServeMux(gw) 作為處理程序傳遞給 mux var,您只需將 ListenAndServe 傳遞給返回的gw變量即可。


    // Register endpoints here

    gw, err := routes.RegisterEndpoints(ctx, c, r)

    if err != nil {

        return err

    }

    fmt.Println("Listening localhost:8080...")

    return http.ListenAndServe(fmt.Sprintf("%s:%d", c.Gateway.Host, c.Gateway.Port), gw)

在RegisterEndpoints函數中,端點參數應該是你的host:port,api端點應該在proto文件的google api注釋中提供。


    err = protos.RegisterUserCenterHandlerFromEndpoint(ctx, mux, fmt.Sprintf("%s:%d", c.Gateway.Host, c.Gateway.Port), dialOpts)

    if err != nil {

        return nil, err

    }


    err = protos.RegisterSsoHandlerFromEndpoint(ctx, mux, fmt.Sprintf("%s:%d", c.Gateway.Host, c.Gateway.Port), dialOpts)

    if err != nil {

        return nil, err

    }


查看完整回答
反對 回復 2022-05-05
?
森林海

TA貢獻2011條經驗 獲得超2個贊

我附加grpc.WithBlock()grpc.DialOption,然后可以通過grpc-gatewaynow 訪問所有服務。

如下所示:

dialOpts := []grpc.DialOption{grpc.WithBalancerName("round_robin"), grpc.WithInsecure(), grpc.WithBlock()}


查看完整回答
反對 回復 2022-05-05
  • 2 回答
  • 0 關注
  • 183 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號