文档首页> 函数工作流 FunctionGraph> 最佳实践> 使用FunctionGraph HTTP函数处理gRPC请求
更新时间:2024-07-08 GMT+08:00

使用FunctionGraph HTTP函数处理gRPC请求

方案概述

本章节主要指导用户使用gRPC,在FunctionGraph中处理gRPC请求。

本章节以gRPC example code项目中“example/helloworld”为例,使用HTTP函数的方式在FunctionGraph中处理gRPC请求。由于HTTP函数本身不支持Go语言直接代码部署,因此本章节将以转换成二进制的方式为例,将Go编写的程序部署到FunctionGraph上。

  • 当前仅拉美-圣地亚哥支持。
  • 用户默认没有gRPC权限,如果需要使用,请在工单系统提交工单添加白名单。

操作流程

  1. 构建代码包

    创建源文件“main.go”,代码如下:

    // Package main implements a grpc_server for Greeter service.
    package main
    
    import (
         "context"
         "flag"
         "fmt"
         "log"
         "net"
    
         pb "helloworld/helloworld"
    
         "google.golang.org/grpc"
    )
    
    var (
         port = flag.Int("port", 8000, "The grpc_server port")
    )
    
    // server is used to implement helloworld.GreeterServer.
    type server struct {
         pb.UnimplementedGreeterServer
    }
    
    // SayHello implements helloworld.GreeterServer
    func (s *server) SayHello(ctx context.Context, in *pb.HelloRequest) (*pb.HelloReply, error) {
         log.Printf("Received: %v", in.GetName())
         return &pb.HelloReply{Message: "Hello " + in.GetName()}, nil
    }
    
    func main() {
         flag.Parse()
         lis, err := net.Listen("tcp", fmt.Sprintf("127.0.0.1:%d", *port))
         if err != nil {
            log.Fatalf("failed to listen: %v", err)
         }
         s := grpc.NewServer()
         pb.RegisterGreeterServer(s, &server{})
         log.Printf("grpc_server listening at %v", lis.Addr())
         if err := s.Serve(lis); err != nil {
            log.Fatalf("failed to serve: %v", err)
         }
     }
    # bootstrap
    $RUNTIME_CODE_ROOT/grpc-server

    在“main.go”中,使用8000端口启动了一个gRPC服务器,并注册了“helloworld.GreeterServer”,调用该服务将返回“Hello XXX”。

  2. 编译打
    1. linux机器下,将上述代码编译 go build -o grpc-server main.go。然后,将grpc-server和bootstrap打包为xxx.zip。
    2. windows机器下使用Golang编译器完成打包,具体步骤如下:
      # 切换编译环境方式
      # 查看之前的golang编译环境
      go env 
      # 设置成linux对应的
      set GOARCH=amd64 
      go env -w GOARCH=amd64 
      set GOOS=linux 
      go env -w GOOS=linux 
      
      # go build -o [目标可执行程序] [源程序] 
      # 例子
      go build -o grpc-server main.go 
      
      # 还原之前的编译环境
      set GOARCH=amd64 
      go env -w GOARCH=amd64 
      set GOOS=windows 
      go env -w GOOS=windows
  3. 创建HTTP函数并上传代码

    创建1个HTTP函数,并上传已打包的xxx.zip包。请参见创建HTTP函数

  4. 创建APIG触发器

    请参见使用APIG触发器,创建APIG触发器,“请求协议”建议选择“gRPC”,“安全认证”建议选择“None”,方便调试

    图1 APIG触发器
  5. 调用测试

    用postman去调试gRPC。

    图2 gRPC请求结果