SQS Обработка дублированных сообщений

Я запускаю процесс очереди, используяAmazons SQS и отдельная машина, которая обрабатывает задания (работник). Я также используюsupervisor чтобы убедитьсяqueue:listen всегда работает на рабочей машине, но когда я определяюnumprocs=8 (как пример на веб-сайте laravel) задания выполняются более одного раза, поэтому электронные письма отправляются пару раз и т. д. '.

Любая идея, как я могу убедиться, что задание выполняется только один раз, даже если я запускаю несколько рабочих процессов и машин?

 Krease10 июл. 2016 г., 19:44
Связанные с:этот ответ

Ответы на вопрос(1)

Решение Вопроса

С помощью SQS, когда работник забирает предмет - работник должен немедленно удалить предмет из SQS, чтобы другие работники также не получили предмет.

Эта часть документации объясняет, сколько времени вам разрешено, чтобы удалить элемент -http://docs.aws.amazon.com/AWSSimpleQueueService/latest/SQSDeveloperGuide/AboutVT.html

Поскольку вы не указали код своей электронной почты, отправляющей работника Laravel, я могу только догадываться, что вы не удаляете элемент SQS сразу, а вместо этого можете удалить его только после того, как электронное письмо было отправлено. Если отправка электронной почты занимает больше времени, чем SQS Visibility Timeout (описано в документе с ссылками), то это будет иметь смысл, если другие сотрудники выполнят ту же задачу.

 mootmoot10 июн. 2016 г., 15:41
Кроме того, счетчик запросов увеличится, когда следующий рабочий запросит его. Это хороший показатель, используемый для очистки или повторного выполнения какой-либо задачи.

Ваш ответ на вопрос