Php 管理每个用户的Beanstalkd队列

Php 管理每个用户的Beanstalkd队列,php,laravel,queue,beanstalkd,Php,Laravel,Queue,Beanstalkd,比如说,为了便于讨论,我有一个单一的SMTP服务器,我可以每分钟(每秒1封)发送60封电子邮件 如果我有60个用户希望通过SMTP服务器发送电子邮件,他们都会向我发送60封电子邮件 如果我在Laravel中保持一个队列,那么来自用户#1的所有60封电子邮件将首先发送,然后来自用户#2的所有60封电子邮件将随后发送,依此类推。用户#60必须等待3540封电子邮件发送后才能开始 我想在循环的基础上使用Beanstalk,我能想到的唯一方法是维护60根管子,每个用户一根,但这需要我运行: php ar

比如说,为了便于讨论,我有一个单一的SMTP服务器,我可以每分钟(每秒1封)发送60封电子邮件

如果我有60个用户希望通过SMTP服务器发送电子邮件,他们都会向我发送60封电子邮件

如果我在Laravel中保持一个队列,那么来自用户#1的所有60封电子邮件将首先发送,然后来自用户#2的所有60封电子邮件将随后发送,依此类推。用户#60必须等待3540封电子邮件发送后才能开始

我想在循环的基础上使用Beanstalk,我能想到的唯一方法是维护60根管子,每个用户一根,但这需要我运行:

php artisan queue:listen --queue=user1,user2,user3,etc,user60
我在这里面临的问题是,如果用户#61注册,在我创建如下新命令之前,侦听器将不会拾取他的管:

php artisan queue:listen --queue=user1,user2,user3,etc,user60,user61
如果我的用户增加到100万,是否建议使用100万根管子

有没有简单的方法让Beanstalkd为每根管子获取一份工作,因为这些管子可以动态创建,我永远不知道我有多少根管子?


我面临的问题是,我的SMTP服务器有一个瓶颈,所以我需要以循环方式发送这些电子邮件。我可以使用MySQL和Cron作业轻松实现这一点,但在过去使用MySQL作为排队系统时,这会导致重复的电子邮件。

简短回答,您可以尝试添加更多工作人员,但如果SMTP服务器上有漏斗, 您只需要记住,您正在用另一个问题替换一个问题

Client 1 has 60 emails
Client 2 has 60 emails and so on ... until client 60
客户端1只会在一分钟后发送第二封电子邮件,因此从客户端1发送60封电子邮件需要一个小时

使用Mandrill或Sendgrid之类的服务会更好地为您提供服务,您可以使用多个服务器发送消息

可能有助于复制