Я отправляю сообщения в 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?
Если это так, что может быть причиной для пропущенных сообщений?