2014-12-13 2 views
1

Скажем, ради аргументов, у меня есть один 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 в качестве системы очередей.

+0

http://stackoverflow.com/a/23151640/6216 может помочь много –

+0

Возможный дубликат [Как читать несколько очередей, пропорционально по пользователю и приоритету?] (Http://stackoverflow.com/questions/23123052/как-должно-я читаемая-множественная-очередь-пропорциональный-на-пользователем, и приоритет) –

ответ

0

Короткий ответ, вы можете попробовать добавить больше работников, но если у вас есть воронка на SMTP-сервере, вам нужно только помнить, что вы заменяете одну проблему другой.

Client 1 has 60 emails 
Client 2 has 60 emails and so on ... until client 60 

Client 1 отправит только второе письмо, через минуту, таким образом, это займет один час, чтобы отправить 60 писем от клиента 1.

Вы бы лучше обслуживаться с использованием услуг, таких как Mandrill или Sendgrid , где у вас будет несколько серверов, отправляющих сообщения.