Ваш текущий процесс выглядит так:
- Рабочий вытягивает (получает) сообщение из очереди
- Удаляет сообщение
- Выполняет действия над сообщением
Это не рекомендуемый способ использования очереди, поскольку работник может потерпеть неудачу после того, как он удалил сообщение, но до того, как он завершил действие. Таким образом, сообщение будет «потеряно».
Рекомендуемый способ использования очереди:
- Извлечь сообщение из очереди (делает сообщение временно невидимым)
- Обработка сообщения
- Удалить сообщение
Таким образом, если рабочий не работает во время обработки сообщения, оно автоматически «снова» появится в очереди после периода невидимости. Рабочий также может отправить сигнал «все еще работает», чтобы сообщение оставалось невидимым дольше, пока оно обрабатывается.
Очереди Amazon SQS FIFO обеспечивают однократную обработку . Это означает, что сообщение будет доставлено только один раз. (Однако, если период невидимости истекает до удаления сообщения, оно будет предоставлено снова.)
Вы говорите, что "некоторые идентификаторы получены более одного раза". Я бы порекомендовал добавить код отладки, чтобы попытаться понять обстоятельства, в которых это происходит, поскольку этого не должно происходить, если сообщения удаляются в течение периода невидимости.