Управление очередями Beanstalkd на пользователя

Допустим, у меня есть один SMTP-сервер, на котором я могу отправлять 60 писем в минуту (1 в секунду).

Если у меня есть 60 пользователей, желающих отправлять электронные письма через этот SMTP-сервер, и все они отправляют мне 60 электронных писем.

Если я сохраню 1 очередь в Laravel, сначала будут отправлены все 60 электронных писем от пользователя # 1, затем все 60 электронных писем от пользователя # 2 и так далее. Пользователь # 60 должен будет ждать 3540 электронных писем, чтобы отправить его до его запуска.

Я хотел бы использовать Beanstalkd на основе циклического перебора, и единственный способ, которым я могу думать об этом, — это поддерживать 60 пробирок, по одной для каждого пользователя, но для этого мне потребуется выполнить:

php artisan queue:listen --queue=user1,user2,user3,etc,user60

Проблема, с которой я здесь сталкиваюсь, заключается в том, что если пользователь # 61 зарегистрируется, его трубка не будет поднята слушателем, пока я не создам новую команду, подобную этой:

php artisan queue:listen --queue=user1,user2,user3,etc,user60,user61

Если я вырасту до 1 миллиона пользователей, желательно ли иметь 1 миллион труб?

Есть ли какой-нибудь простой способ попросить Бинсталька принести 1 работу на одну пробирку, потому что эти пробирки могут быть созданы на лету, я никогда не узнаю, сколько у меня пробирок?

Проблема, с которой я сталкиваюсь, заключается в том, что у меня есть узкое место на SMTP-сервере, поэтому мне нужно отправлять эти электронные письма в циклическом порядке. Я могу легко добиться этого, используя MySQL и Cron Jobs, но в прошлом это приводило к дублированию электронных писем при использовании MySQL в качестве системы массового обслуживания.

1

Решение

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

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

Клиент 1 отправит второе письмо только через минуту, таким образом, для отправки 60 писем от клиента 1 потребуется один час.

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

0

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

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