在Google Cloud Pub/Sub控制台创建Protobuf Schema时遇多消息类型报错
解决Google Cloud Pub/Sub Protobuf Schema多消息类型报错问题
问题原因
Google Cloud Pub/Sub的Protobuf Schema规则明确要求:每个Schema定义只能包含一个顶级消息类型。你最初的代码包含两个顶级消息VideoImpression和VideoImpressionsList,直接触发Too many message types specified in schema definition报错;拆分后跨Schema引用消息类型,由于Pub/Sub不支持跨Schema解析类型,因此出现"VideoImpression" is not defined报错。
解决方案
将VideoImpression定义为VideoImpressionsList的嵌套消息,确保整个Schema仅保留一个顶级消息类型,修改后的代码如下:
syntax = "proto2"; package mypackage; message VideoImpressionsList { // 嵌套定义VideoImpression消息 message VideoImpression { optional string user_id = 1; optional string candidate_id = 2; optional int64 event_timestamp = 3; } repeated VideoImpression video_impressions = 1; }
修改后的Schema既符合Pub/Sub的规则,又能完整保留原有的消息结构,可正常保存。如果业务场景需要单独使用VideoImpression消息,可单独创建一个仅包含该消息的独立Schema,两个Schema各自独立使用即可。
内容的提问来源于stack exchange,提问作者ThinkTeamwork
相关产品推荐
相关产品推荐

