grpc buf-cli

buf.build官方文档地址
grpc网关

一、环境

  • mac mini m2
  • brew version 4.1.15
  • go sdk version 1.20.6
  • goland 2023.2.3

二、安装一些插件

  • brew install protobuf
  • brew install protoc-gen-go
  • brew install protoc-gen-go-grpc
  • brew install bufbuild/buf/buf

三、构建 BSR 仓库(推荐使用buf.work模式)

在这里插入图片描述

目录结构,gateway是工作区目录,buf push 目前不支持直接在根目录进行push操作

# lhdht/proto/buf.work.yaml

version: v1
directories:
  - gateway

# lhdht/proto/gateway/buf.yaml
# 这里可以直接cd进来,执行buf mod init直接生成

version: v1
name: buf.build/lhdht/gateway # 此处是你的BSR仓库地址,暂不支持工作区列表,只能单独提交模块
deps: # 依赖目录,如果依赖其他工作区的东西需要在这里导入,详情看官方文档,写的很清楚

四、定义一个proto文件

// lhdht/proto/gateway/acme/config/v1/system.proto

syntax = "proto3";

package acme.config.v1;

message Config {
  uint64 id = 1;
  string name = 2;
  string desc = 3;
  uint32 state = 4;
  string flag = 5;
  string address = 6;
  bool type = 7;
  uint64 use_multipoint = 8;
  uint64 ip_limit_count = 9;
  uint64 ip_limit_time = 10;
  repeated string route_rules = 11;
}

message GetConfigListRequest {
  uint64 page = 1;
  uint32 page_size = 2;
  string search_key = 3;
  uint32 state = 4;
}

message GetConfigListResponse {
  repeated Config list = 1;
}

service ConfigService {
  rpc GetConfigList(GetConfigListRequest) returns (GetConfigListResponse);
}

五、提交BSR仓库

在buf.build官网注册并创建BSR仓库,生成Token,在本地登陆后,再往后看,官网写的很详细
为什么目录会这么深,是因为要遵守buf cli的规范

  • buf lint 如果没有异常返回则可以提交,当然也可以忽略,建议遵守规范
  • cd ./gateway - buf push 返回id则成功

六、在项目中使用BSR仓库

项目根目录创建 buf.gen.yaml

version: v1
managed:
  enabled: true
  go_package_prefix:
    default: lhdht_child_system_gin/gen
plugins:
  - plugin: buf.build/grpc/go
    out: gen
    opt: paths=source_relative
  - plugin: buf.build/protocolbuffers/go
    out: gen
    opt: paths=source_relative
  • buf generate [BSR仓库地址]
    • 例:buf generate buf.build/lhdht/gateway
  • buf.build 暂未提供批量执行BSR构建(也可能是我没找到,找到的兄弟记得传送门),如果需要执行的工作区太多,建议直接写个批处理命令

七、使用案例(go)

buf generate [BSR仓库地址] 有概率因为网络的原因构建失败,多试几次就好,懂得都懂

package main

// 1.需要监听
// 2.需要实例化gRPC服务端
// 3.在gRPC商注册微服务
// 4.启动服务端
import (
	"context"
	"fmt"
	"google.golang.org/grpc"
	pb "lhdht_child_system_gin/gen/acme/config/v1"  // 这里是 buf generate [BSR仓库生成的]
	
	"net"
)

// 定义空接口
type SystemConfigService struct {
	pb.UnimplementedConfigServiceServer
}

var u = SystemConfigService{}

// 实现方法
func (s *SystemConfigService) GetConfigList(ctx context.Context, req *pb.GetConfigListRequest) (resp *pb.GetConfigListResponse, err error) {
	list := []*pb.Config{
		{
			Name: "系统配置",
		},
	}
	resp = &pb.GetConfigListResponse{List: list}
	return
}

func main() {
	// 地址
	addr := "127.0.0.1:8080"
	// 1.监听
	listener, err := net.Listen("tcp", addr)
	if err != nil {
		fmt.Printf("监听异常:%s\n", err)
	}
	fmt.Printf("监听端口:%s\n", addr)
	// 2.实例化gRPC
	s := grpc.NewServer()
	// 3.在gRPC上注册微服务
	pb.RegisterConfigServiceServer(s, &u)
	// 4.启动服务端
	s.Serve(listener)
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梨花炖海棠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值