Повторная доставка сообщений может происходить по нескольким причинам.Прежде всего, возможно, что сообщение было опубликовано дважды.Иногда издатель получит сообщение об ошибке, например, о превышении установленного срока, что означает, что публикация заняла больше времени, чем предполагалось.Сообщение может или не может быть фактически опубликовано в этой ситуации.Часто правильное действие заключается в том, что издатель пытается повторить публикацию, и фактически именно так поступают предоставляемые Google клиентские библиотеки по умолчанию.Следовательно, может быть две копии сообщения, которые были успешно опубликованы, даже если клиент получил подтверждение только для одного из них.
Во-вторых, Google Cloud Pub / Sub гарантирует как минимум однократную доставку .Это означает, что иногда сообщения могут быть доставлены, даже если ackDeadline еще не прошел или подтверждение было отправлено обратно в службу.Подтверждения - лучшее усилие, и большую часть времени они успешно обрабатываются службой.Однако из-за сетевых сбоев, перезапусков серверов и других регулярных вхождений такого рода иногда подтверждения, отправляемые подписчиком, не обрабатываются, что приводит к повторной доставке сообщений.
Абонент должен быть спроектирован таким образом, чтобы онэти случайные доставки, как правило, путем обеспечения того, что операции являются идемпотентными, то есть, что результаты обработки сообщения многократно совпадают, или путем отслеживания и улавливания дубликатов.В качестве альтернативы можно использовать Облачный поток данных в качестве подписчика для удаления дубликатов .