gcloud beta pubsub 订阅拉取格式

问题描述 投票:0回答:2

快速提问: 当我通过命令行工具从 pubsub 订阅中提取消息时

gcloud beta pubsub subscriptions pull MY_SUB

我得到一个表格,其中(所有详细信息和)数据作为字符串(已解码) 但我想用它,所以我这么做了:

gcloud beta pubsub subscriptions pull MY_SUB --format=json

我收到一个包含(所有详细信息)的 json,但数据已编码。

有办法通过格式化来解析它吗?

发布消息示例:

gcloud beta  pubsub topics publish myTopic "Topic Message" --attribute=Ai=A,Bee=B

无格式化_返回

  ─────────────┬─────────────────┬────────────────┬─────────────────────────

  ──────────────────────────────────────────────────────────────────────────
    ─────────────────────────────────────────────────────────────┐
    │     DATA    │    MESSAGE_ID   │   ATTRIBUTES   │                                                                             
    ACK_ID                                                                             
    │

  ├─────────────┼─────────────────┼────────────────┼────────────────────────

  ──────────────────────────────────────────────────────────────────────────
     ──────────────────────────────────────────────────────────────┤
     │ Topic Message │ 122122177601805 │ Ai=A Bee=B  │ ACK_ID... │

  └─────────────┴─────────────────┴────────────────┴────────────────────────

  ──────────────────────────────────────────────────────────────────────────
    ──────────────────────────────────────────────────────────────┘

格式化

[
{
"ackId": "ACK_ID..",
"message": {
  "attributes": {
    "Ai": "A",
      "Bee": "B"
    },
     "data": "SGVsbG8gVG9waWM=",
     "messageId": "122121955409996",
     "publishTime": "2017-05-11T10:26:54.143Z"
    }
}
]
google-cloud-platform publish-subscribe gcloud beta subscriptions
2个回答
11
投票

使用

--format
参数,您走在正确的轨道上,但您需要使用投影来解码数据。在这种情况下,您需要使用
decode()
投影。以下是如何使用相同的数据执行相同的命令,但消息的数据是经过 Base64 解码的。

gcloud beta pubsub subscriptions pull MY_SUB --format="json(ackId, message.attributes, message.data.decode(\"base64\").decode(\"utf-8\"), message.messageId, message.publishTime)"

[
  {
    "ackId": "QV5AEkw...D5-NTlF",
    "message": {
      "attributes": {
        "Ai": "A",
        "Bee": "B"
      },
      "data": "Topic Message",
      "messageId": "127236468931635",
      "publishTime": "2017-05-29T23:15:04.637Z"
    }
  }
]

0
投票

这适用于我的用例:

gcloud pubsub subscriptions pull test-sub --format="table[no-heading](DATA)" > alert.json

当我尝试上述示例时,我不断收到错误:

base64:输入无效

jq:错误(在 pull.json:10):字符串(“ewogICJpbm...)不是有效的 base64 数据

© www.soinside.com 2019 - 2024. All rights reserved.