当前位置: 首页 > 知识库问答 >
问题:

如何在服务之间共享gRPC协议定义

聂溪叠
2023-03-14

我指定了许多独立的gRPC服务,这些服务将全部托管在同一个服务器进程之外。每个服务都在其自己的protobuf文件中定义。然后通过gRPC工具运行这些工具,为我提供目标语言(在我的情况下是c语言),然后我可以在其中实现我的服务器和客户端。

这些单独的API中的每一个都使用了许多公共元素,如错误响应枚举、空消息类型(这似乎在gRPC WellKnownTypes中可用;但我也看不到如何包含这些元素,所以我定义了自己的)。

目前,我的每个原型都将重复的枚举和类构建到自己的命名空间中。虽然我知道我可以在一个通用的proto文件中共享这些定义,并将其包括在内;我不知道如何将这些代码中的一个代码生成到公共名称空间中。虽然这样做有效,但将其保持在一组会更整洁;如果执行诸如跨服务聚合错误之类的操作,它在以后的转换和等价性方面也可能会有问题。

我假设我错过了一些东西,因为我对WellNotnTypes命名空间等事物的阅读表明这应该是可能的,但如前所述,我也不明白我如何在Proto中引用它。

所以目前在gRPC上看起来很轻,所以我的搜索没有出现太多,我是新手,所以有什么建议吗?

共有1个答案

邹浩
2023-03-14

协议缓冲区通过使用不同的标识符来解决这个问题。每条消息都将放置在不同的协议缓冲区特定包中,该包独立于C#命名空间。例如:

// common.proto
syntax "proto3";
package my.api.common;

option csharp_namespace = "My.Api.Common";

message Shared {
  // ...
}

然后在服务特定文件中:

// service1.proto
syntax "proto3";
package my.api.service1;

import "common.proto";

option csharp_namespace = "My.Api.Service1";

message Special {
    my.api.common.Shared shared = 1;
}

您需要确保公共proto只有一个副本,否则它们可能会失去同步。您可以将常见消息放在公共消息中。proto文件,并从每个特定的其他proto文件中引用它们。

 类似资料:
  • 问题内容: 有没有办法在AngularJS中的服务之间共享数据? 用例:来自不同服务的数据聚合 例如,我想要一个service1从REST服务加载一些数据。然后,另一个service2将来自另一个REST API的其他数据添加到service1数据中,以创建数据聚合服务。 我基本上是想根据它们使用的API来分离服务,但是仍然有一个服务来最终保存所有数据。 问题答案: 创建使用延迟库的第三项服务,以

  • 我试图在共享的go模块中创建共享的原型定义,但我运气不佳。具体来说: -我想要一个包含共享定义的模块原型中的原型文件。 -模块原型中的其他原型文件将引用共享定义。 -模块原型-使用将引用模块原型(通过go.mod) -模块原型-使用go代码将导入和使用模块原型中的定义 -两个模块都存储在github.com 我无法使各种包名称对齐。不管我用什么,总会有失败的。目前,模块protos没有任何错误,但

  • 当前体系结构: 问题: 我们在前端和后端层之间有一个两步流程。 null 微服务2(MS2)需要验证I1的完整性,因为它来自前端。如何避免对MS1进行新的查询?最好的办法是什么? 我试图优化的流删除了步骤1.3和2.3 流程1: null 流程2: 2.1用户X已在本地/会话存储中存储了数据(MS2_Data) 2.2用户X在MS1上保留数据(MS2_Data+MS1_Data) 2.3 MS1使

  • 本服务条款(以下简称“本协议”)由北京百度网讯科技有限公司(以下简称“百度”)与您(以下简称“您”或“用户”)订立,用于规范您对百度统计(以下简称“本服务”)的使用。只要您点击 “确定”按钮、完成注册程序或开通、使用本服务,即代表您已理解并同意本协议,特别是以黑体字标示出的关于百度统计及您重大权益的条款均以知晓、理解并接受,同意将其作为确定双方权利义务的依据。如果您不同意本协议,请您立即停止使用本

  • 京东小程序开放平台开发者服务协议 【请认真阅读并理解以下内容,其中以加粗方式显著标识的文字,请着重阅读、慎重考虑】 前言 1、本协议由拟在京东小程序开放平台(以下或简称“京东小程序平台”或“小程序平台”)开发京东小程序(以下或简称“小程序”)的京东小程序开发者(以下简称“开发者”,“乙方”或“您”)与京东小程序开放平台运营方(以下或简称“京东”或“甲方”)共同缔结,具有合同效力。 2、本协议由协议