具有原型架构的 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
我想将 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