gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 21:58:01 25 4
gpt4 key购买 nike

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

我怎样才能做到这一点?

最佳答案

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

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 请求。这不是特定于 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 都表示处理成功,任何其他代码表示应重新传递消息。

关于python - 来自端点 API URL 的发布/订阅推送订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55334670/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com