Указывает ли идентификатор получения сообщения (будущее), что сообщение отправлено в PubSub? - PullRequest
0 голосов
/ 26 сентября 2019

Я отправляю сообщения в google pubsub с помощью функции обратного вызова, которая считывает идентификатор сообщения из будущего.Используя следующий код:

"""Publishes multiple messages to a Pub/Sub topic with an error handler."""
import time

from google.cloud import pubsub_v1

# ...

publisher = pubsub_v1.PublisherClient()
topic_path = publisher.topic_path(project_id, topic_name)

def get_callback(f, data):
    def callback(f):
        try:
            print(f.result())
        except:  # noqa
            print('Please handle {} for {}.'.format(f.exception(), data))

    return callback

for i in range(10):
    data = str('message')
    # When you publish a message, the client returns a future.
    future = publisher.publish(
        topic_path, data=data.encode('utf-8')  # data must be a bytestring.
    )
    # Publish failures shall be handled in the callback function.
    future.add_done_callback(get_callback(future, data))

print('Published message with error handler.')

Я успешно получаю обратно идентификатор сообщения с ошибками / исключениями, однако обнаружил, что некоторые сообщения не читаются в pubsub (при просмотре их с консоли GCP).

Идентификатор сообщения печатается в строке print(f.result()) в функции обратного вызова.

Мой вопрос: Безопасно ли предполагать, что сообщения отправляются в Pubsub успешно после полученияa messageid?

Если это так, что может быть причиной для пропущенных сообщений?

1 Ответ

1 голос
/ 26 сентября 2019

Если публикация успешно завершена с идентификатором сообщения, то да, Cloud Pub / Sub гарантирует доставку сообщения подписчикам.Если вы не видите сообщение, это может быть вызвано несколькими причинами:

  1. Подписка не существовала на момент публикации сообщения.Cloud Pub / Sub доставляет сообщения подписчикам только в том случае, если подписка была создана до публикации сообщения.
  2. Другой подписчик для подписки уже работал и получил сообщение.Если вы используете консоль GCP для извлечения сообщений, когда подписчик включен и работает, возможно, что подписчик получил сообщения.
  3. Если вы получили сообщение на консоли один раз, а затем перезагрузили его, чтобы получить сообщения снова, вы можете не увидеть сообщение снова, пока не истечет крайний срок подтверждения, который по умолчанию равен 10 секундам.
  4. Одного запроса на извлечение (что и делает функция «Просмотр сообщений» консоли GCP), может быть недостаточночтобы получить сообщение.Если вы щелкнете по нему несколько раз или запустите базового подписчика , вы, скорее всего, увидите сообщение.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...