我正在嘗試實作資料合約邏輯。我有 2 個服務相互交換訊息。服務 A 以某種格式發送訊息 用于生成它的 .proto 檔案的檔案描述符 proto。服務 B 獲取它們,訊息和檔案描述符原型,并且必須確保訊息不會破壞模式定義。到目前為止,我所做的是使用描述符 proto 創建一個動態訊息實體,并嘗試將訊息解組到動態訊息實體中,如果在解組程序中沒有發生錯誤,則它算作成功(訊息不打破模式)。
- 是否可以依靠 unmarshal 函式來決定訊息是否正常?
- 我注意到,即使我發送具有完全不同模式的訊息,解組也會成功。我發現導致解組失敗的唯一方法是發送缺少必填欄位的 proto2 訊息。那么,是否可以使用完全不同的模式定義來解組每條訊息?
- 我正在使用官方的 Go protobuf 庫
uj5u.com熱心網友回復:
- 是的,可以使用 unmarshal 函式來檢查您的 proto 是否有效。
- 不,它不是為了解組任意訊息而設計的,而是為了只解組 protobuf 訊息中存在的欄位。例如,您的原始訊息的結構如下:
message MyMessage {
uint64 id = 1;
string name = 2;
string surname = 3;
}
如果您的服務器接收到僅包含idand的訊息,name并且您的服務器正在嘗試解組此訊息,id并且name欄位將被解組,而surname您的結構中的欄位將為空。這種方法也適用于 JSON。
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/524294.html
