Я пытаюсь использовать Google PubSub для передачи и получения сообщений между двумя службами. Однако некоторые из отправленных сообщений, по-видимому, отбрасываются случайным образом и не обрабатываются методом обратного вызова подписчика.
При отправке сообщений около половины сообщений обрабатываются методом обратного вызова. Для другой половины метод обратного вызова, кажется, не вызывается вообще (информация не регистрируется). Однако сообщения по-прежнему исчезают из темы и не отправляются повторно.
Код, используемый для запуска абонента:
logger = logging.getLogger(LOGGER_NAME)
logger.info('Starting the pubsub subscriber')
subscriber = pubsub_v1.SubscriberClient()
subscription_path = subscriber.subscription_path(GOOGLE_CLOUD_PROJECT, SUBSCRIPTION_NAME)
subscriber.subscribe(subscription_path, callback=callback)
while True:
try:
sleep(60)
except Exception as e:
// Log exception
Метод обратного вызова:
def callback(message):
logger = logging.getLogger(LOGGER_NAME)
logger.info(f'Recieved callback with message: {message}', extra = {'callback_message': message} )
// Process message
Ошибка, по-видимому, на стороне абонента. Сообщения отправляются от издателя, и если подписчик не подключен к теме, сообщения не исчезают.
Я пытался использовать управление потоком для контроля количества сообщений, получаемых подписчиком, но, похоже, это не оказывает никакого влияния.
Могут ли сообщения обрабатываться без вызова метода обратного вызова? Существуют ли другие причины, по которым сообщения могут исчезать из темы?
РЕДАКТИРОВАТЬ: Оказывается, что другой сервис считывал из той же подписки, обрабатывая пропущенные сообщения.