【问题标题】:Pub/sub push subscription from an endpoint API URL来自端点 API URL 的 Pub/sub 推送订阅
【发布时间】:2019-08-15 12:13:45
【问题描述】:

我正在我的应用程序中处理 pubsub 订阅。我想知道如何通过端点在python中为推送订阅编码。

这是我尝试过的代码:

> from google.cloud import pubsub_v1

> from google.oauth2 import service_account


> gcp_service_account_credential_path = 'gcp-service-account.json'


>credentials=service_account.Credentials.from_service_account_file(str(gcp_service_account_credential_path))

> project_id = "my project name"

> topic_name = 'topic name'

> subscription_name = 'sub name'

> endpoint = 'http://localhost:5059/push_pub_sub_data'




> subscriber = pubsub_v1.SubscriberClient(credentials=credentials)

> topic_path = subscriber.topic_path(project_id, topic_name)

>subscription_path=subscriber.subscription_path(project_id,subscription_name)

> push_config = {'push_endpoint': endpoint}

> subscriber.modify_push_config(subscription_path, push_config)

我怎样才能做到这一点?

【问题讨论】:

  • 你能提供更多细节吗?到目前为止,您尝试过什么?
  • 我在谷歌搜索,但我没有找到任何与此推送机制正确相关的来源。

标签: python google-cloud-pubsub


【解决方案1】:

您似乎将push subscriptionspull subscriptions 混为一谈。推送订阅通常不会使用 Cloud Pub/Sub 客户端库;尝试从订阅中提取消息时会使用此库。如果您尝试将现有订阅从拉取订阅更改为推送订阅,您只会调用 modify_push_config。如果您从一开始就知道要使用推送订阅,那么您应该在创建订阅时在云控制台中选择该选项:

或在创建订阅时指定端点:

gcloud pubsub subscriptions create <subscription name> --topic <topic name> --push-endpoint <URL to push to>

您需要register the push endpoint。请注意,这意味着 localhost 不能用作推送端点。此外,推送端点需要是 HTTPS,而不是 HTTP。

创建推送端点后,您需要在该端点配置一些东西以接收 HTTP POST 请求。这不是特定于 Pub/Sub 的东西;你可以使用任何你想要的 Python 库来设置一个 HTTPS 端点。 Python 附带了http.server,它可以做到这一点,尽管它可能只应该用于试验,而不是作为完全安全的生产解决方案部署。 messages you will receive 是 JSON 编码的 Pub/Sub 消息,例如,

{
  "message": {
    "attributes": {
      "key": "value"
    },
    "data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==",
    "messageId": "136969346945"
  },
  "subscription": "projects/myproject/subscriptions/mysubscription"
}

您使用 HTTP 响应代码来确认或确认消息。代码 200、201、202、204 或 102 均表示处理成功,任何其他代码表示应重新传递消息。

【讨论】:

  • 我们如何在创建推送类型订阅时获取端点 url?我们还需要配置它吗?
  • “获取端点 url”是什么意思?端点 URL 是您在创建订阅时提供的 URL。这将是您以某种可访问的方式设置的端点。
  • 我的意思是它是如何生成的?我正在尝试使用控制台创建推送类型订阅,它正在询问一个..我对此完全陌生,所以只是试试我的运气。
  • 您需要设置一个具有与之关联的 URL 或 AppEngine endpoint 的网络服务器来处理消息。如果您还没有端点来处理消息并且没有特定理由使用推送模型,那么请坚持使用pull model via the client libraries
  • 同样的问题或困惑,我们可以在哪里或如何创建端点 url
猜你喜欢
  • 1970-01-01
  • 2020-02-14
  • 2016-04-14
  • 2017-09-14
  • 2020-02-01
  • 1970-01-01
  • 2020-09-03
  • 2021-11-09
  • 2021-06-17
相关资源
最近更新 更多