【问题标题】:How to use version control in GRPC Protocol Buffer如何在 GRPC 协议缓冲区中使用版本控制
【发布时间】:2021-10-21 03:26:13
【问题描述】:

我在GRPC 服务器中有一个protocol buffer 文件,SayHellopackage hello.v1 下定义

syntax = "proto3";

package hello.v1;

service GreetService {
    rpc SayHello(SayHelloRequest) returns (SayHelloResponse) {}
}

message SayHelloRequest {
    string name = 1;
}

message SayHelloResponse {
}

函数可能会随着时间而改变,如下所示:

service GreetService {
    rpc SayHello(SayHelloRequest) returns (SayHelloResponse) {}
}

message SayHelloRequest {
    string name = 1;
    uint32 age = 2;
}

message SayHelloResponse {
    string reply_message = 1;
}

但是对于用户来说,他们希望有一个不间断的服务,所以我想尽量减少对他们的影响。我的问题是如何同时保留两个版本SayHello?客户端可以调用它们在cpp 中抛出不同的namespace 或在golang 中抛出不同的package

【问题讨论】:

    标签: protocol-buffers grpc


    【解决方案1】:

    一般来说,您的 protobuf 文件应该有一个单一的事实来源。一种解决方案是使用 monorepo,即将客户端和服务器都放在同一个 monorepo 中。但是,这种方法在某些大公司之外并不常见。

    拥有多个存储库的组织倾向于为其所有 protobuf 创建一个单独的存储库,然后通过子模块将其包含在其他存储库中,或者在构建时通过网络下拉。

    无论如何,总是可以通过修改原型来引入重大更改,即使只有一个事实来源。您可以考虑运行 Buf 作为对所有代码更改的预提交测试,以检测是否引入了重大更改。

    【讨论】:

      猜你喜欢
      • 2012-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-18
      • 2017-04-01
      • 2017-03-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多