Push-подписка на публикацию / подписку с URL-адреса API конечной точки - PullRequest
0 голосов
/ 25 марта 2019

Я работаю над подпиской на 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 голосов
/ 25 марта 2019

Похоже, вы объединяете push-подписки и pull-подписки .Push-подписки обычно не используют клиентскую библиотеку Cloud Pub / Sub;можно использовать эту библиотеку при попытке получить сообщения из подписки.Вам следует позвонить modify_push_config только в том случае, если вы пытаетесь изменить существующую подписку с push-подписки на push-подписку.Если вы с самого начала знаете, что хотите использовать принудительную подписку, то при создании подписки вам следует выбрать эту опцию в консоли Cloud:

Cloud console subscription creation

или укажите конечную точку при создании подписки:

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 указывают на успешную обработку, а любой другой код указывает, что сообщение должно быть доставлено.

...