我們將 Golang 和 .NET Core 用于我們的相互通信微服務基礎架構。服務中的所有數據都基于我們創建的 Protobuffs 協議。這是我們的 Protobuffs 之一的示例:syntax = "proto3";package Protos;option csharp_namespace = "Protos";option go_package="Protos";message EventMessage { string actionType = 1; string payload = 2; bool auditIsActive = 3;}Golang 運行良好,服務根據需要生成內容并將其發送到 SQS 隊列,一旦發生這種情況,.NET 核心服務將獲取數據并嘗試對其進行序列化。以下是 SQS 消息示例的內容:{"@type":"type.googleapis.com/Protos.EventMessage","actionType":"PushPayload","payload":"<<INTERNAL>>"}但是我們得到一個例外,說電線類型未定義如下所述: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)兩個服務中的 Proto 文件完全相同。我們需要添加任何潛在的缺失選項或屬性嗎?
2 回答

小怪獸愛吃肉
TA貢獻1852條經驗 獲得超1個贊
看起來您使用的是 JSON 格式而不是二進制格式。在這種情況下,您想要ParseJson(string json)
,而不是ParseFrom(byte[] data)
。
注意:二進制格式更有效,如果這對您很重要。它還對 protobuf 庫/工具有更好的支持。

倚天杖
TA貢獻1828條經驗 獲得超3個贊
基本上有兩種可能的情況,或者您為 .NET 和 GoLang 生成的 protos 文件不在同一版本中,或者您的數據在 GoLang 和 .NET 應用程序之間傳輸時已損壞。
Protobuf 是一個二進制協議,請檢查您是否有任何 http 過濾器或其他任何可以更改傳入或傳出字節流的東西。
- 2 回答
- 0 關注
- 256 瀏覽
添加回答
舉報
0/150
提交
取消