【问题标题】:How to store .proto files如何存储 .proto 文件
【发布时间】:2021-12-15 18:50:22
【问题描述】:

目前我将每个 protobuf 合约文件存储在一个单独的项目中,专门用于具体的微服务。

所以我为每个微服务都有 protobuf-my-microservice.jar,其中包含已编译的 protobuf 文件。然后我将这些 jars 上传到 artifactory,微服务正在构建阶段获取它们。

如果我将所有服务的所有合同存储在一个工件中,这会是一个好方法吗? (就像一个为所有服务提供 1 个库)

我将在每个微服务文件夹中分离 .proto 文件。 例如

/common
     /first-service/
          FirstService.proto
     /second-service/
          SecondService.proto

不确定我是否可以这样做,因为我似乎在这里违反了单一责任原则。 使用这种方法可能还会遇到其他问题吗?

【问题讨论】:

    标签: java protocol-buffers artifactory proto protobuf-java


    【解决方案1】:

    我认为一个非常流行的建议是创建两个独立的项目。

    First 将包含 .proto 文件,仅包含消息(类型),对所有服务通用,并且可能专用于一个或多个服务。我建议根据它们所属的域来组织它们。每个.proto 文件代表一些域和与之相关的消息。您可以将一个.proto 导入另一个.proto,并使用import (docs) 重用一些常用类型。

    第二个项目将仅包含带有服务定义的 .proto 文件。每个服务都有自己的.proto。这个项目也将依赖/使用第一个。

    需要澄清的一点是,请求/响应消息应该在服务的.proto 文件中声明,所以在第二个项目中,而不是在第一个项目中。虽然这些消息中使用的类型应该来自第一个项目。

    举个例子,如果我们有一个 RPC 提供一些用户数据,那么GetUserData rpc、GetUserDataRequestGetUserDataResponse 消息应该进入user_data_service.proto(作为服务项目的一部分)。但是如果我们假设GetUserDataResponse 返回类似UserData 的内容,那么UserData 消息应该从第一个项目(项目类型)进入user.proto,以及所有其他与用户相关的消息。

    您可以随意使用这个命题,但当然没有什么比“单一规则”更可遵循的了。那个似乎工作得很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-03
      • 2021-12-30
      • 2017-05-02
      • 2022-06-11
      • 1970-01-01
      相关资源
      最近更新 更多