Google Cloud Pub / Sub использует доставку «По крайней мере, один раз».Начиная с Документы :
Как правило, Cloud Pub / Sub доставляет каждое сообщение один раз и в том порядке, в котором оно было опубликовано.Однако сообщения могут иногда доставляться не по порядку или более одного раза.В целом, для обеспечения доставки более одного раза требуется, чтобы ваш подписчик был идемпотентным при обработке сообщений.
Это означает, что он гарантирует, что доставит сообщение 1: N раз, поэтомувы можете получить сообщение несколько раз, если не передадите его через что-то еще, что сначала его дедуплицирует.Нет настройки, которую вы можете определить, чтобы гарантировать точную доставку.В документах указано, что вы можете получить желаемое поведение, используя PubSubIO
Cloud Dataflow, но такое решение устарело :
Вы можете достичь ровно одной обработки Cloud Pub/ Подпотоки сообщений с использованием Cloud Dataflow PubsubIO
.PubsubIO не дублирует сообщения на пользовательских идентификаторах сообщений или назначенных Cloud Pub / Sub.
Говоря все это, я никогда не видел на самом деле Google Cloud Pub / Sub sendсообщение дважды.Вы уверены, что это действительно ваша проблема, или сообщение переиздается, потому что вы не подтверждаете сообщение в течение Крайнего срока подтверждения (как вы указали выше, по умолчанию это 10 секунд).Если вы не признаете это, оно будет переиздано.Начиная с документы (выделение мое) :
Подписка создается на одну тему.Он имеет несколько свойств, которые могут быть установлены во время создания или обновлены позже, в том числе:
- срок подтверждения : Если ваш код не подтверждает сообщение досрок, сообщение отправляется снова. По умолчанию 10 секунд.Максимальный настраиваемый конечный срок, который вы можете указать, составляет 600 секунд (10 минут).
Если это так, просто подтвердите свои сообщения в указанный срок, и вы не увидите эти дубликаты так часто.