#python #google-cloud-pubsub
#python #google-облако-pubsub
Вопрос:
Я работаю над подпиской на pubsub в своем приложении. Я хочу знать, как закодировать push-подписку на 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. не могли бы вы, пожалуйста, предоставить более подробную информацию? и что вы пробовали до сих пор?
2. я ищу в Google, но я не нашел ни одного источника, должным образом связанного с этим механизмом push.
Ответ №1:
Похоже, вы объединяете push-подписки и pull-подписки. Принудительные подписки обычно не используют клиентскую библиотеку Cloud Pub / Sub; можно использовать эту библиотеку при попытке извлечь сообщения из подписки. Вызов выполняется только modify_push_config
в том случае, если вы пытаетесь изменить существующую подписку с pull-подписки на push-подписку. Если вы с самого начала знали, что хотите использовать push-подписку, то вам следует выбрать этот параметр в облачной консоли при создании подписки:
или укажите конечную точку при создании подписки:
gcloud pubsub subscriptions create <subscription name> --topic <topic name> --push-endpoint <URL to push to>
Вам нужно будет зарегистрировать push-конечную точку. Обратите внимание, это означает, что localhost не будет работать как конечная точка push. Кроме того, конечной точкой push должен быть HTTPS, а не HTTP.
Как только вы создадите push-конечную точку, вам нужно что-то настроить на этой конечной точке для получения HTTP POST-запросов. Это не что-то специфичное для Pub / Sub; вы можете использовать любую библиотеку Python, которую вы хотите, которая настраивает конечную точку HTTPS. Python поставляется с http.server, который может это делать, хотя, вероятно, его следует использовать только для экспериментов, а не развертывать как полностью безопасное производственное решение. Сообщения, которые вы будете получать, представляют собой сообщения Pub / Sub в кодировке JSON, например,
{
"message": {
"attributes": {
"key": "value"
},
"data": "SGVsbG8gQ2xvdWQgUHViL1N1YiEgSGVyZSBpcyBteSBtZXNzYWdlIQ==",
"messageId": "136969346945"
},
"subscription": "projects/myproject/subscriptions/mysubscription"
}
Вы используете код ответа HTTP для подтверждения сообщения. Все коды 200, 201, 202, 204 или 102 указывают на успешную обработку, а любой другой код указывает на то, что сообщение должно быть доставлено повторно.
Комментарии:
1. как мы можем получить URL-адрес конечной точки при создании подписки типа push? а также нужно ли нам это настраивать?
2. Что вы подразумеваете под «получить URL-адрес конечной точки»? URL-адрес конечной точки — это тот, который вы указываете при создании подписки. Это была бы конечная точка, которую вы настроили каким-либо доступным способом.
3. Я имею в виду, как это генерируется? Я пытался создать подписку типа push с помощью консоли, и она запрашивает ее.. Я совершенно новичок в этом, поэтому просто испытывал свою удачу.
4. Для обработки сообщений вам потребуется настроить веб-сервер, с которым связан URL-адрес, или конечную точку AppEngine . Если у вас еще нет конечной точки для обработки сообщений и у вас нет конкретной причины использовать модель push, тогда просто придерживайтесь использования модели pull через клиентские библиотеки .
5. Тот же вопрос или путаница, откуда и как мы можем создать URL-адрес конечной точки