具有原型架构的 GSP PubSub 主题 - 时间戳验证错误

GSP PubSub topic with proto schema - TimeStamp validation error

我想将 GCP PubSub 与原型架构验证结合使用,其中消息将位于 JSON。消息的一部分也是 TimeStamp 所以我在消息中添加了 TimeStamp 定义(因为不支持导入)并且我的模式定义如下所示:

syntax = "proto3";

message NewSourceEvent {
  message Source {
      Timestamp time = 1;
      string username = 2;
  }

  message Timestamp {
    int64 seconds = 1;
    int32 nanos = 2;
  }

  Source source = 1;
}

测试消息:

{
    "source": {
       "time": "1999-05-11T05:17:10Z",
       "username": "un"
    }    
}

当我测试来自我的服务的消息时(将 protobuf 对象序列化为 JSON)它失败了,因为它无法序列化时间戳 - Invalid schema message: (source.time): invalid value "1999-05-11T05:17:10Z" for type type.googleapis.com/NewSourceEvent.Timestamp.

有什么方法可以定义能够解析消息的架构,并且 time 仍然是 TimeStamp

timestamp 类型是从外部定义导入的,例如 import "google/protobuf/timestamp.proto";

BUT, Pub/Sub 暂时不支持外部 import , 像你 check here , 所以恐怕不会上班。解决方法是将其更改为 string 类型。

没有它我找不到启用导入或使用时间戳的方法。


您创建的定义实际上是在验证这样一条消息:

{ 
 "source":{
  "time":{
   "seconds":"999",
   "nanos":"999"
 },
  "username":"un"
}

您可以尝试在 int64 变量中使用 unix 时间戳格式:1643886443340 = Thursday, February 3, 2022 11:07:23.340 AM