Я экспериментирую с использованием облачных функций в качестве асинхронного фонового работника, запускаемого PubSub, и выполняю немного более длительную работу (порядка нескольких минут).Полный код здесь https://github.com/zdenulo/cloud-functions-pubsub
Мой прототип вставляет данные в BigQuery и ждет несколько минут (чтобы имитировать более длинную задачу).Я публикую 100 сообщений в теме PubSub (с интервалом в 1 секунду).
Подчеркивается, что PubSub может доставлять несколько раз одно и то же сообщение, но я был удивлен, что от 10 до 40 из 100 дублируются.Время отклика на CF составило 5, 6, 7 минут.За 4 минуты ответа я не заметил дубликатов.
Я провел несколько тестов за одинаковые промежутки времени.Разница во времени между получением первого и второго сообщения составляет от ~ 30 до ~ 600 секунд.
В документации https://cloud.google.com/pubsub/docs/troubleshooting упоминается "Cloud Pub / Sub может отправлять дубликаты сообщений. Например, если вы не подтверждаете сообщение до истечения срока его подтверждения, Cloud Pub / Sub повторно отправляет сообщение«.Для подписки на облачные функции срок подтверждения составляет 600 секунд (10 минут), поэтому, насколько я понимаю, причина не в этом.
Возможно, у меня есть конкретный контрольный пример или, может быть, есть что-то еще.
Буду признателен за совет о том, как справиться с такой ситуацией, и если это нормально, или как это сделать для предотвращения дублирования(исключая поток данных).