我正在我的应用程序中处理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)
我该如何实现?
答案 0 :(得分:2)
您似乎正在混合push subscriptions和pull subscriptions。推送订阅通常不会使用Cloud Pub / Sub客户端库;尝试从订阅中提取消息时,将使用此库。仅在尝试将现有订阅从请求订阅更改为推送订阅时,才调用modify_push_config
。如果从一开始就知道要使用推送订阅,那么在创建订阅时应在Cloud控制台中选择该选项:
或在创建订阅时指定端点:
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都表示处理成功,而其他任何代码都表示应重新发送邮件。