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

laravel amazon-sqs

1132 просмотра

1 ответ

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

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

Автор: Broshi Источник Размещён: 12.11.2019 09:53

Ответы (1)


0 плюса

Решение

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

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

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

Автор: Evgeny Размещён: 01.06.2016 07:44
Вопросы из категории :
32x32