PavelUstyugov
@PavelUstyugov
proger support

Как настроить Redis чтобы он не выполнял очереди чаще чем раз в N секунд?

Из Laravel отправляются письма и попадают в очередь Redis. Но поскольку сайт многопользовательский, то может получиться так, что в одну секунду будет сразу отправлено много писем от разных пользователей. Очередь будет освобождаться ведь достаточно быстро, но при этом почтовый сервис нас заблокирует за слишком частую отправку. Так вот как ограничить выполнение задач интервалами? Например, чтоб между выполнением каждой задачи было не менее 20ти секунд?
  • Вопрос задан
  • 79 просмотров
Пригласить эксперта
Ответы на вопрос 1
Nikolino
@Nikolino
В handle() твоего Job'a нужно использовать так:
public function handle() {
    Redis::throttle('key')->allow(1)->every(20)->then(function () {
        // Email sending logic...
    }, function () {
        // Could not obtain lock...
        return $this->release(10);
    });
}


Разрешать выполнение Job'a 1 раз за 20 секунд.

https://laravel.com/docs/5.8/queues#rate-limiting
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
FunBox Москва
от 120 000 ₽
FunBox Санкт-Петербург
от 120 000 ₽
FunBox Ульяновск
от 120 000 ₽