【问题标题】:Can webhook target GCP PubSub directly?webhook 可以直接针对 GCP PubSub 吗?
【发布时间】:2020-12-07 23:48:39
【问题描述】:

我们正在使用 webhook 来监听 Jira 问题事件。每当票证上发生活动时,JIRA API 都会通知在 Google Cloud Function 内运行的 HTTP 端点。在这个 Cloud Function 中,我们只是通过以下方式将请求原封不动地转发到 Pub/Sub:

def forward_to_pubsub(request):

    publisher = pubsub_v1.PublisherClient()
    topic_path = publisher.topic_path(project_id, topic_id)

    # Request body contains user, project, issue basically everything we care about
    jira_body = request.json
    publisher.publish(topic_path, data=json.dumps(jira_body).encode('utf-8'))

这似乎是一个不必要的跳跃。无论如何将 Pub/Sub 配置为 HTTP webhook 的目标?无论哪种方式都无法从文档中弄清楚。

【问题讨论】:

    标签: python google-cloud-platform google-cloud-functions webhooks google-cloud-pubsub


    【解决方案1】:

    不,这是不可能的。 Pub/Sub 主题没有可用作 webhook 的相应 HTTP 端点。如果要从最终用户应用程序触发 Pub/Sub 主题,则需要在它们之间使用前端服务器:

    更多详情请见https://cloud.google.com/pubsub/docs/overview#endpoints

    【讨论】:

      【解决方案2】:

      实际上可以使用 REST API 直接通过 HTTP 将消息发布到 Pub/Sub 主题。来自https://cloud.google.com/pubsub/docs/publisher#rest 的快速入门指南 -

      要发布消息,请发送如下所示的 POST 请求:

      POST  https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID:publish
      Authorization: Bearer $(gcloud auth application-default print-access-token)
      

      替换以下内容:

      • PROJECT_ID:有主题的项目的项目ID
      • TOPIC_ID:主题的ID

      在请求正文中指定以下字段:

      {
      "messages": [
        {
          "attributes": {
            "KEY": "VALUE",
            ...
          },
          "data": MESSAGE_DATA,
        }
      ]
      }
      

      替换以下内容:

      • KEY:消息属性的键
      • VALUE:消息属性键的值
      • MESSAGE_DATA:带有消息数据的 base64 编码字符串

      如果请求成功,则响应为带有消息 ID 的 JSON 对象。以下示例是带有消息 ID 的响应:

      {
        "messageIds": [
          "19916711285"
        ]
      }
      

      发布消息后,Pub/Sub 服务会将消息 ID 返回给发布者。

      在使用 Google REST API 时还有一个 REST API reference 和一个 overview of service endpoints and common instructions 应该会有所帮助。

      请注意,发布请求必须确认到 projects.topic.publish method specification,因此仍需要从 JIRA webhook 通知转换。

      【讨论】:

        猜你喜欢
        • 2020-08-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-22
        • 1970-01-01
        • 2021-04-22
        相关资源
        最近更新 更多