Подписка на Pub / sub push с URL-адреса API конечной точки

#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-адрес конечной точки