Laravel несколько очередей: прослушивание игнорирует тайм-аут / начинается снова

Так что это кажется странной проблемой, у нас есть процесс, который отправляет 5 000 или 10 000 электронных писем за 1 задание, но он продолжает запускаться каждые 60 секунд, даже если другой процесс все еще выполняется.

Как команда deamon:

queue:work database --sleep=10 --daemon --quiet --tries=3 --env=production --queue="default"

Как прослушать команду:

queue:listen database --timeout=600 --sleep=10 --quiet --tries=3 --env=production --queue="emails"

То, что происходит здесь, если мы запустим несколько слушателей или несколько рабочих демонов после приблизительно 60 секунд, новый процесс начнется снова, это похоже на таймаут php, но другой процесс просто продолжится, поэтому он, кажется, запускает новый для нет причин. В коде он будет зацикливаться, получая 100 писем из БД каждый раз и записывая в файл журнала

\Log::info("Getting {$emails->count()} new e-mails, round: {$this->round}

Журнальный файл:

[2015-11-09 13:02:27] production.INFO: Getting 100 new e-mails, round: 1
[2015-11-09 13:02:32] production.INFO: Getting 100 new e-mails, round: 2
[2015-11-09 13:02:38] production.INFO: Getting 100 new e-mails, round: 3
[2015-11-09 13:02:43] production.INFO: Getting 100 new e-mails, round: 4
[2015-11-09 13:02:49] production.INFO: Getting 100 new e-mails, round: 5
[2015-11-09 13:02:55] production.INFO: Getting 100 new e-mails, round: 6
[2015-11-09 13:03:00] production.INFO: Getting 100 new e-mails, round: 7
[2015-11-09 13:03:06] production.INFO: Getting 100 new e-mails, round: 8
[2015-11-09 13:03:11] production.INFO: Getting 100 new e-mails, round: 9
[2015-11-09 13:03:17] production.INFO: Getting 100 new e-mails, round: 10
[2015-11-09 13:03:22] production.INFO: Getting 100 new e-mails, round: 11
[2015-11-09 13:03:28] production.INFO: Getting 100 new e-mails, round: 12
[2015-11-09 13:03:32] production.INFO: Getting 100 new e-mails, round: 1
[2015-11-09 13:03:35] production.INFO: Getting 100 new e-mails, round: 13
[2015-11-09 13:03:42] production.INFO: Getting 100 new e-mails, round: 2
[2015-11-09 13:03:45] production.INFO: Getting 100 new e-mails, round: 14
[2015-11-09 13:03:52] production.INFO: Getting 100 new e-mails, round: 3

Здесь вы можете увидеть, что старый процесс продолжается и начинается новый, поэтому он отправляет двойные электронные письма. При запуске нового процесса таблица заданий обновляет попытки до 1, а зарезервированный_ат также обновляется.

Может кто-нибудь помочь мне здесь, это должно быть что-то глупое, но мы перепробовали почти все, и он продолжает работать несколько раз. Запуск 1 очереди deamon worker или прослушивание очереди решает проблему, но мы хотим запустить несколько работников очереди в одну очередь, что должно быть возможно.

Мы бежим на кузнице, которая порождает процессы с супервизором

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]