Dan*_*kov 2 go protocol-buffers protobuf-net .net-core grpc
我们使用 Golang 和 .NET Core 作为我们的相互通信微服务基础设施。服务中的所有数据都基于我们创建的 Protobuffs 协议。这是我们的 Protobuff 之一的示例:
syntax = "proto3";
package Protos;
option csharp_namespace = "Protos";
option go_package="Protos";
message EventMessage {
string actionType = 1;
string payload = 2;
bool auditIsActive = 3;
}
Run Code Online (Sandbox Code Playgroud)
Golang 运行良好,该服务正在根据需要生成内容并将其发送到 SQS 队列,一旦发生这种情况,.NET Core 服务就会获取数据并尝试对其进行序列化。
以下是 SQS 消息示例的内容:
{"@type":"type.googleapis.com/Protos.EventMessage","actionType":"PushPayload","payload":"<<INTERNAL>>"}
Run Code Online (Sandbox Code Playgroud)
但我们收到一个异常,表明线路类型未定义,如下所述:
Google.Protobuf.InvalidProtocolBufferException: Protocol message contained a tag with an invalid wire type.
at Google.Protobuf.UnknownFieldSet.MergeFieldFrom(CodedInputStream input)
at Google.Protobuf.UnknownFieldSet.MergeFieldFrom(CodedInputStream input)
at Google.Protobuf.UnknownFieldSet.MergeFieldFrom(UnknownFieldSet unknownFields, CodedInputStream input)
at Protos.EventMessage.MergeFrom(CodedInputStream input) in /Users/maordavidzon/projects/github_connector/GithubConnector/GithubConnector/obj/Debug/netcoreapp3.0/EventMessage.cs:line 232
at Google.Protobuf.MessageExtensions.MergeFrom(IMessage message, Byte[] data, Boolean discardUnknownFields, ExtensionRegistry registry)
at Google.Protobuf.MessageParser`1.ParseFrom(Byte[] data)
Run Code Online (Sandbox Code Playgroud)
两个服务中的 Proto 文件完全相同。
是否有任何我们需要添加的潜在缺失选项或属性?
看起来您使用的是 JSON 格式而不是二进制格式。在这种情况下,你想要ParseJson(string json),而不是ParseFrom(byte[] data)。
注意:如果您很重要的话,二进制格式会更有效。它还对 protobuf 库/工具有更好的支持。
| 归档时间: |
|
| 查看次数: |
1295 次 |
| 最近记录: |