【问题标题】:Slow down Laravel worker放慢 Laravel 工作者的速度
【发布时间】:2017-07-11 03:21:24
【问题描述】:

我已经将 Redis 与 Laravel 连接起来用于排队电子邮件,一切都很好...... 但在开发环境中,我使用 mailtrap.io(免费版)。

问题是 mailtrap 只允许每秒接收 2 封电子邮件,所以我永远不会收到所有排队的电子邮件,因为 redis 发送电子邮件就像疯了一样......也许 10 per/s

有没有办法以某种方式减慢队列速度,使其每秒最多发送 2 封邮件?

【问题讨论】:

  • 可能类似于Mail::getSwiftMailer()->registerPlugin(new \Swift_Plugins_AntiFloodPlugin(2, 1)); 第一个参数是每个连接发送的最大电子邮件数,第二个参数是连接之间的等待时间,以秒为单位。如需更多帮助check this
  • 我正在使用 Laravel - 通知发送邮件...
  • 你能帮我一下吗,这个插件具体在哪里调用?

标签: laravel redis queue


【解决方案1】:

是的,这是一个解决方案,它们被称为工作 :) 您可以创建一个文件来专门在 Jobs 文件夹和这样的类中发送电子邮件

class SendPushNotification extends Job implements ShouldQueue
{
    use InteractsWithQueue, SerializesModels;

    protected $pushNotification;

    /**
     * Create a new job instance.
     *
     * @return void
     */
    public function __construct(PushNotification $pushNotification)
    {
        $this->pushNotification = $pushNotification;
    }

    /**
     * Execute the job.
     *
     * @return void
     */
    public function handle()
    {
        $this->pushNotification->send();
    }
}

然后调用控制器中的类

$this->dispatch(new SendPushNotification($pushNotification))->delay(1);

延迟是几秒钟,您可以创建一个带有数组的构造函数来接收两封电子邮件

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-15
    相关资源
    最近更新 更多