来自端点API URL的发布/订阅推送订阅

时间:2019-03-25 09:24:17

标签: python google-cloud-pubsub

我正在我的应用程序中处理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)

我该如何实现?

1 个答案:

答案 0 :(得分:2)

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

Cloud console subscription creation

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

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

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

一旦创建了推送端点,则需要在该端点上配置一些内容以接收HTTP POST请求。这不是发布/订阅特定的内容;您可以使用任何想要建立HTTPS端点的Python库。 Python随附http.server,它可以执行此操作,尽管它可能仅应用于实验,而不应作为完全安全的生产解决方案进行部署。 messages you will receive是JSON编码的发布/订阅消息,例如

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

您使用HTTP响应代码来确认或否定消息。代码200、201、202、204或102都表示处理成功,而其他任何代码都表示应重新发送邮件。