乐趣区

关于grpc:Grpc使用bufbuild-快速编译

本文通过实例来解说应用 buf 来疾速的编译 proto 文件,不须要再用 protoc 命令加各种参数来编译 proto 文件。

当时须要装置 buf,装置办法请参考官网 installation

  1. 咱们先建设目录构造
  1. auth.proto
syntax = "proto3";

option go_package ="trade/auth/pb/proto/go/auth/v1;authV1";

package auth.v1;

message LoginRequest {
  string username = 1;
  string password = 2;
}

message LoginResponse {
  string access_token = 1;
  int32 expires_in = 2;
}


service AuthService {rpc Login (LoginRequest) returns (LoginResponse);
}
  1. 进入 proto 文件夹,执行 buf mod init
cd trade/apps/auth/pb/proto

buf mod init
  1. 进入下级 pb 文件夹 增加 buf.gen.yaml 文件

buf.gen.yaml 的配置,此处用到的 plugin 是本地模式的,请提前装好红框里的插件

怎么装,请自行百度,如果有疑难能够私信我。

# buf.gen.yaml
version: v1
plugins:
  - plugin: go
    out: gen/proto/go
    opt: paths=source_relative
  - plugin: go-grpc
    out: gen/proto/go
    opt: paths=source_relative
  1. 输出命令 buf generate 进行编译,生成 grpc 的代码
    buf generate
  2. 如果须要生成 grpc-gateway 的代码,请持续向下看
  • 在 pb 目录下创立一个 auth.yaml
type: google.api.Service
config_version: 3

http:
  rules:
    - selector: auth.v1.AuthService.Login
      post: "/v1/login"
      body: "*"
  • 批改 buf.gen.yaml, 增加 grpc-gateway 插件,并指定 http 接口规定的文件为 auth.yaml
  - plugin: grpc-gateway
    out: gen/proto/go
    opt:
      - paths=source_relative
      - grpc_api_configuration=auth.yaml
  • 从新执行 buf generate 进行编译,生成 proto 文件对应的 gw 文件
  1. 如果须要应用第三方的 validate 组件,如:protoc-gen-validate
  • 批改 buf, 增加 deps
version: v1
deps:
  - buf.build/envoyproxy/protoc-gen-validate
breaking:
  use:
    - FILE
lint:
  use:
    - DEFAULT
  • 进入 proto 目录 执行 buf mod update 锁定对应的版本号

执行完命令后会多出一个 buf.lock 的文件

当然也能够手动写死版本号 例如:

deps:
  - buf.build/envoyproxy/protoc-gen-validate:6607b10f00ed4a3d98f906807131c44a
  • 批改 auth.proto 文件
  • 批改 buf.gen.yaml 增加 validate 的 plugin
  • 在 pb 文件下创立 buf.work.yaml, 定义一个工作区,能够使得 auth.proto 文件间接导入 deps 的 proto 文件
version: v1
directories:
  - proto
  • 从新执行 buf generate 进行编译,生成 proto 文件对应的 validate 文件

如果在用的过程中有问题,能够随时私信我

转载时请注明原文地址,谢谢

退出移动版