如何维护原始文件?

zer*_*ing 5 git go protocol-buffers microservices grpc

我创建了 3 个 proto 文件,并希望将其保存在 git repo 中:

在此处输入图片说明

与所有其他文件分开。存储库仅包含.proto文件。我有 3 个微服务,每个微服务都有自己的存储库,使用这些 proto 文件相互通信:

在此处输入图片说明

您可以在上图中看到,proto 文件正在从不同的微服务中使用。

假设,我要更改Protofile2并将更改推送到proto存储库,请记住 proto 文件存储库与微服务存储库分离:

在此处输入图片说明

当我go testservice1service2上运行时,它应该告诉我,Protofile2已更改或没有与 service2 文件夹中的 proto 文件相同的哈希值:
在此处输入图片说明

我必须再次生成代码。

是否存在解决问题的工具?或者我应该如何解决?

col*_*tor 5

这是我的建议:

  • 将您的 protos(及其生成的 makefile)存储在单个 git 存储库中。每个定义都应该在他们自己的目录中以简化导入
  • 用版本标记 repo - 特别是在潜在的破坏性更改上
  • 从您的微服务中导入特定的 proto defs,例如 import "github.com/me/myproto/protodef2"
  • 使用 go modulesgo v1.112019 年引入)确保微服务 X 获得兼容版本的 protobuf Y

要点 2 - 正如@PaulHankin 提到的 - 尽量不要破坏向后兼容性。可以删除 Protobuf 字段,但只要其余字段索引不变,旧的客户端调用仍将与较新的 proto defs 兼容。