Python中Google Pub/Sub能否从主题获取Schema类,还是需本地proto文件?
问题
我希望在Python中通过Google Pub/Sub发布消息前使用Schema验证数据,已通过gcloud pubsub topics create命令搭配--schema参数将Schema关联至主题。请问在发布或订阅代码中,是否可以像获取编码(topic.schema_settings.encoding)那样从主题中获取Schema类?还是必须复制/提供.proto文件并在对应仓库中生成类,才能完成消息的发布或解析?
参考代码示例:
publisher_client = PublisherClient() topic_path = publisher_client.topic_path(project_id, topic_id) # 获取主题的编码类型 topic = publisher_client.get_topic(request={"topic": topic_path}) encoding = topic.schema_settings.encoding # 实例化由protoc生成的、定义在us-states.proto中的类 state = us_states_pb2.StateProto() state.name = "Alaska" state.post_abbr = "AK"
回答
- 目前无法直接从Pub/Sub主题中获取可直接实例化的Schema类,没法像获取编码格式那样直接拿到可用的Python类对象。
- 必须通过对应的
.proto文件,使用protoc工具生成Python类(比如示例里的us_states_pb2),才能完成消息的序列化、发布以及后续的解析验证。 - 本质原因是Pub/Sub主题仅存储Schema的元数据和文本定义(比如proto的字符串形式),不会自动为你生成对应编程语言的绑定类。你需要先导出Schema的proto定义,在本地环境生成代码后,才能在发布/订阅逻辑里用这些类构造符合Schema规范的消息。
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

