Google Cloud PubSub сообщение доставлено более одного раза до истечения срока подтверждения - PullRequest
0 голосов
/ 29 ноября 2018

Справочная информация. Мы настроили тему облачного паба для взаимодействия с несколькими службами приложений. Там мы настроили push-подписчиков.Мы установили для него крайний срок подтверждения, равный 600 секундам

Проблема: мы наблюдали, что pubsub дважды отправлял одно и то же сообщение своим подписчикам (более двух раз из некоторых других тем). Просматривая журнал, я вижу, что это сообщение произошлос интервалом всего в 1 секунду. В идеале, поскольку мы настроили ackDeadline на 600 секунд, pubsub должен повторить попытку доставки сообщения только через 600 секунд.

Нужны следующие ответы:

  1. Почему одно и то же сообщение доставлялось более одного раза в 1 секунду

  2. Разве pubsub не учитывает конфигурацию ackDeadline до повторной попытки доставки сообщения?

Ссылки: - https://cloud.google.com/pubsub/docs/subscriber

1 Ответ

0 голосов
/ 29 ноября 2018

Повторная доставка сообщений может происходить по нескольким причинам.Прежде всего, возможно, что сообщение было опубликовано дважды.Иногда издатель получит сообщение об ошибке, например, о превышении установленного срока, что означает, что публикация заняла больше времени, чем предполагалось.Сообщение может или не может быть фактически опубликовано в этой ситуации.Часто правильное действие заключается в том, что издатель пытается повторить публикацию, и фактически именно так поступают предоставляемые Google клиентские библиотеки по умолчанию.Следовательно, может быть две копии сообщения, которые были успешно опубликованы, даже если клиент получил подтверждение только для одного из них.

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

Абонент должен быть спроектирован таким образом, чтобы онэти случайные доставки, как правило, путем обеспечения того, что операции являются идемпотентными, то есть, что результаты обработки сообщения многократно совпадают, или путем отслеживания и улавливания дубликатов.В качестве альтернативы можно использовать Облачный поток данных в качестве подписчика для удаления дубликатов .

...