亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

兩種不同語言之間的協議緩沖區

兩種不同語言之間的協議緩沖區

Go
手掌心 2022-04-20 19:27:27
我們將 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 庫/工具有更好的支持。


查看完整回答
反對 回復 2022-04-20
?
倚天杖

TA貢獻1828條經驗 獲得超3個贊

基本上有兩種可能的情況,或者您為 .NET 和 GoLang 生成的 protos 文件不在同一版本中,或者您的數據在 GoLang 和 .NET 應用程序之間傳輸時已損壞。

Protobuf 是一個二進制協議,請檢查您是否有任何 http 過濾器或其他任何可以更改傳入或傳出字節流的東西。


查看完整回答
反對 回復 2022-04-20
  • 2 回答
  • 0 關注
  • 256 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號