在PubSub Schema中使用google.protobuf.Timestamp出现导入未加载错误如何解决
问题原因
Google Cloud Pub/Sub的Protocol Buffer schema校验服务不会默认预加载google/protobuf/timestamp.proto这类Protobuf官方通用知名类型(WKT),你需要显式提供所有依赖的文件内容才能通过校验。
解决方案
你可以选择以下任意一种方式处理:
- 方法1:内联所有依赖的知名类型定义到你的schema文件中
直接将google/protobuf/timestamp.proto的官方定义复制到你的schema开头,替换原有的import语句即可,完整可用的schema示例如下:
syntax = "proto3"; package google.protobuf; option cc_enable_arenas = true; option java_package = "com.google.protobuf"; option java_outer_classname = "TimestampProto"; option java_multiple_files = true; option objc_class_prefix = "GPB"; option go_package = "google.golang.org/protobuf/types/known/timestamppb"; option csharp_namespace = "Google.Protobuf.WellKnownTypes"; message Timestamp { int64 seconds = 1; int32 nanos = 2; } // 下面是你自己的业务定义 syntax = "proto3"; package proto; message MyEvent { google.protobuf.Timestamp timestamp = 1; // other fields }
- 方法2:使用gcloud命令行提交schema时指定依赖文件
如果你用gcloud CLI操作,可以在创建schema的命令中通过参数指定主proto文件和依赖文件所在目录,命令示例如下:
gcloud pubsub schemas create YOUR_SCHEMA_NAME \ --type=PROTOCOL_BUFFER \ --definition-file=./your_event.proto \ --imports=./path/to/google/protobuf/directory
- 方法3:在Google Cloud控制台提交时合并所有依赖内容
如果通过网页控制台创建schema,直接把所有依赖的proto文件内容按依赖顺序(被依赖的放在前面)粘贴到同一个schema定义输入框即可。
内容的提问来源于stack exchange,提问作者Theodor
相关产品推荐
相关产品推荐

