zoukankan      html  css  js  c++  java
  • 使用gRPC-Gateway快速构建微服务-双向认证下rpc-gateway使用(同时提供rpc和http接口)

    https://github.com/grpc-ecosystem/grpc-gateway

     在grpc之上加一层代理并转发,转变成protobuf格式来访问grpc服务

    安装

    go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-grpc-gateway
    go get -u github.com/grpc-ecosystem/grpc-gateway/protoc-gen-swagger
    go get -u github.com/golang/protobuf/protoc-gen-go

    Prod.proto

    syntax="proto3";
    package services;
    import "google/api/annotations.proto";
    
    message  ProdRequest {
        int32 prod_id =1;   //传入的商品ID
    }
    message ProdResponse{
        int32 prod_stock=1;//商品库存
    }
    
    service ProdService {
        rpc GetProdStock (ProdRequest) returns (ProdResponse){
            option (google.api.http) = {
                get: "/v1/prod/{prod_id}"
            };
    
        }
    }

    生成两个文件

    首先cd 进入pbfiles

    这会生成Prod.pb.go
    protoc --go_out=plugins=grpc:../services  Prod.proto
    
    
    这会生成Prod.pb.gw.go
    protoc  --grpc-gateway_out=logtostderr=true:../services Prod.proto

    httpserver.go

    package main
    
    import (
        "context"
        "github.com/grpc-ecosystem/grpc-gateway/runtime"
        "google.golang.org/grpc"
        "grpcpro/services"
        "log"
        "net/http"
    )
    
    func main()  {
        gwmux:=runtime.NewServeMux()
        opt := []grpc.DialOption{grpc.WithInsecure()}
        err:=services.RegisterProdServiceHandlerFromEndpoint(context.Background(),
            gwmux,"localhost:8081",opt)
        if err != nil {
            log.Fatal(err)
        }
        httpServer:=&http.Server{
            Addr:":8080",
            Handler:gwmux,
        }
        httpServer.ListenAndServe()
    
    }

    server.go

    package main
    
    import (
        "google.golang.org/grpc"
        "grpcpro/services"
        "net"
    )
    
    func main()  {
        rpcServer:=grpc.NewServer()
        services.RegisterProdServiceServer(rpcServer,new(services.ProdService))
    
        lis,_:=net.Listen("tcp",":8081")
    
        rpcServer.Serve(lis)
    
    
    }

     源码地址:

    https://github.com/sunlongv520/grpc-learn

    https://github.com/sunlongv520/grpc-doc

  • 相关阅读:
    2016.11.21随笔
    2016.11.19随笔
    年月日
    导航position:absolute
    360搜索(边框)
    导航代码position:relative
    邮箱注册代码
    2016.11.18随笔
    2016.11.17随笔
    个人简历网页版代码
  • 原文地址:https://www.cnblogs.com/sunlong88/p/12051719.html
Copyright © 2011-2022 走看看