Wiz*_*bit 8 c# protocol-buffers protobuf-net grpc
我指定了许多独立的gRPC服务,这些服务都将在同一服务器进程中托管.每个服务都在自己的protobuf文件中定义.然后通过gRPC工具运行这些工具,为我提供目标语言(在我的情况下为c#),然后我可以在其中实现我的服务器和客户端.
每个这些不同的API使用一些共同的元素,诸如错误响应枚举,该空消息类型(这似乎是在可用GRPC WellKnownTypes ;但我不能看我怎么有,要么让我定义我自己).
目前,我最终将每个proto构建重复的枚举和类放入他们自己的命名空间中.虽然我知道我可以在一个共同的原型文件中共享这些定义并包含它; 我不知道如何只将这些代码生成一个共同的命名空间.虽然这是有效的,但将它保持在一组是最整洁的; 如果在服务之间聚合错误等事情,它在转换和等效性方面也可能会出现问题.
我假设我遗漏了一些东西,因为我对WellKnownTypes命名空间这样的东西的阅读表明这应该是可能的,但如前所述,我也没有看到我在Proto中如何引用它.
因此目前在gRPC上似乎相当轻松,所以我的搜索量不会太多,我是新手,所以任何指针?
Car*_*elo 13
协议缓冲区通过使用不同的package标识符来解决此问题.每条消息都将放在一个不同的协议缓冲区特定包中,该包独立于C#命名空间.例如:
// common.proto
syntax "proto3";
package my.api.common;
option csharp_namespace = "My.Api.Common";
message Shared {
// ...
}
Run Code Online (Sandbox Code Playgroud)
然后在服务特定文件中:
// 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;
}
Run Code Online (Sandbox Code Playgroud)
您需要确保只有一个普通原型的副本,否则它们可能会失去同步.您可以将常用消息放入common.proto文件中,并从每个特定的其他proto文件中引用它们.
| 归档时间: |
|
| 查看次数: |
2816 次 |
| 最近记录: |