Можно ли загрузить одно и то же сообщение из AWS SQS более одного раза? - PullRequest
0 голосов
/ 05 июня 2019

У меня есть очередь SQS FIFO, которую мы посылаем для обработки на другой конец группы идентификаторов. У нас есть 4 рабочих, переваривающих сообщение. Как только работник получает сообщение, он удаляет сообщение и сохраняет эти идентификаторы, пока не достигнет предела перед выполнением действий.

Что я заметил, так это то, что некоторые идентификаторы принимаются более одного раза, когда каждый идентификатор отправляется только один раз. Это нормально?

1 Ответ

1 голос
/ 05 июня 2019

Ваш текущий процесс выглядит так:

  • Рабочий вытягивает (получает) сообщение из очереди
  • Удаляет сообщение
  • Выполняет действия над сообщением

Это не рекомендуемый способ использования очереди, поскольку работник может потерпеть неудачу после того, как он удалил сообщение, но до того, как он завершил действие. Таким образом, сообщение будет «потеряно».

Рекомендуемый способ использования очереди:

  • Извлечь сообщение из очереди (делает сообщение временно невидимым)
  • Обработка сообщения
  • Удалить сообщение

Таким образом, если рабочий не работает во время обработки сообщения, оно автоматически «снова» появится в очереди после периода невидимости. Рабочий также может отправить сигнал «все еще работает», чтобы сообщение оставалось невидимым дольше, пока оно обрабатывается.

Очереди Amazon SQS FIFO обеспечивают однократную обработку . Это означает, что сообщение будет доставлено только один раз. (Однако, если период невидимости истекает до удаления сообщения, оно будет предоставлено снова.)

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

...