• 使用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

  • 相关阅读:
    Luogu P1004 方格取数
    Luogu P1896 [SCOI2005]互不侵犯
    Luogu P1879 [USACO06NOV]玉米田Corn Fields 【状压dp模板】
    高精度模板(结构体)
    【模板】快读
    vue input框type=number 保留两位小数自定义组件
    elementui表格表头合并
    将excle表中得数据生成insert语句插入到数据库中
    数据库基本语法
    ztree 数组和树结构互转算法
  • 原文地址:https://www.cnblogs.com/sunlong88/p/12051719.html
Copyright © 2020-2023  润新知