2016-05-31 2 views
1

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

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

+0

Связанный: [этот ответ] (http://stackoverflow.com/a/38290017/836214) – Krease

ответ

1

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

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

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

+0

Кроме того, запросчик будет увеличиваться, когда следующий рабочий запросит его. Это хороший индикатор, используемый для очистки или повторной задачи. – mootmoot

Смежные вопросы