Laravel Redis :: уведомление о дросселе - PullRequest
0 голосов
/ 19 июня 2020

У меня есть приложение Laravel, которое может отправлять электронную почту всем пользователям. Теперь я хочу разрешать 200 электронных писем каждые 20 минут, чтобы избежать «нарушения политики» со стороны моего поставщика услуг электронной почты.

Я прочитал это руководство: https://laravel.com/docs/7.x/queues#job -middleware но как я могу реализовать в моей системе?

Я использую redis с Horizon и отправляю сообщения следующим образом:

Notification::send($usersCollection, new EmailMessage());

class EmailMessage extends Notification implements ShouldQueue{
        use Queueable;

        public function toMail($notifiable)
        {...}

}

Я добавил функцию дескриптора, но она не работает, электронные письма отправляются в один go

public function handle()
  {
    Redis::throttle('email')->allow(1)->every(1000)->then(function () {
      // send email to subscriber
      logger($this->email);
    }, function () {
      // could not obtain lock, retry this job in 5 seconds.
      return $this->release(5);
    });
  }
...