Скажем, ради аргументов, у меня есть один SMTP-сервер, на котором я могу отправлять 60 электронных писем в минуту (1 раз в секунду).Управление очередями Beanstalkd на одного пользователя
Если у меня есть 60 пользователей, которые хотят отправлять электронные письма через этот SMTP-сервер, и все они отправляют мне 60 писем.
Если я поддерживаю 1 очередь в Laravel, все 60 писем от пользователя №1 будут отправлены первыми, тогда все 60 писем от пользователя №2 будут отправлены дальше и так далее. Пользователю # 60 придется ждать 3,540 электронных писем для отправки до его запуска.
Я хотел бы использовать Beanstalkd на круговом основе, и единственный способ, которым я могу думать, чтобы делать это, поддерживает 60 трубок, по одному для каждого пользователя, но это потребовало бы мне бежать:
проблема я столкнулся в том, что если пользователь # 61 подпишется, его трубка не будет подобран слушателем, пока я не создать новую команду, как так:
php artisan queue:listen --queue=user1,user2,user3,etc,user60,user61
Если я вырасти до 1 миллиона пользователей, целесообразно ли иметь 1 миллион трубок?
Есть ли какой-либо простой способ попросить Beanstalkd получить 1 работу на трубу, потому что эти трубки могут быть созданы на лету, я никогда не узнаю, сколько у меня труб?
Проблема, с которой я столкнулась, заключается в том, что у меня есть узкое место на SMTP-сервере, поэтому мне нужно отправить эти письма в круговой форме. Я могу легко достичь этого, используя MySQL и Cron Jobs, но это привело к дублированию писем в прошлом при использовании MySQL в качестве системы очередей.
http://stackoverflow.com/a/23151640/6216 может помочь много –
Возможный дубликат [Как читать несколько очередей, пропорционально по пользователю и приоритету?] (Http://stackoverflow.com/questions/23123052/как-должно-я читаемая-множественная-очередь-пропорциональный-на-пользователем, и приоритет) –