РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1392 of 1392 menu

Класс RateLimited

Класс RateLimited представляет собой middleware для заданий очереди, который ограничивает количество попыток выполнения задания в определённый промежуток времени. Он позволяет создавать гибкие ограничения на основе уникальных ключей, таких как идентификатор пользователя или IP-адрес. Класс принимает в конструкторе два параметра: уникальный ключ для ограничения и количество разрешённых попыток.

Синтаксис

<?php use IlluminateQueueMiddlewareRateLimited; return new RateLimited($key, $maxAttempts, $decayMinutes = 1); ?>

Пример использования

Давайте создадим задание, которое ограничивает отправку уведомлений пользователю до 3 раз в минуту:

<?php namespace AppJobs; use IlluminateBusQueueable; use IlluminateContractsQueueShouldQueue; use IlluminateFoundationBusDispatchable; use IlluminateQueueInteractsWithQueue; use IlluminateQueueMiddlewareRateLimited; use IlluminateQueueSerializesModels; class SendNotification implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $userId; public function __construct($userId) { $this->userId = $userId; } public function middleware() { return [ new RateLimited('user_' . $this->userId, 3, 1) ]; } public function handle() { // Отправка уведомления пользователю echo "Notification sent to user " . $this->userId; } } ?>

Результат выполнения кода:

"Notification sent to user 1" "Notification sent to user 1" "Notification sent to user 1"

Пример с динамическим ключом

Используем IP-адрес в качестве ключа для ограничения количества запросов от одного источника:

<?php namespace AppJobs; use IlluminateBusQueueable; use IlluminateContractsQueueShouldQueue; use IlluminateFoundationBusDispatchable; use IlluminateQueueInteractsWithQueue; use IlluminateQueueMiddlewareRateLimited; use IlluminateQueueSerializesModels; class ProcessRequest implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $ipAddress; public function __construct($ipAddress) { $this->ipAddress = $ipAddress; } public function middleware() { return [ new RateLimited('ip_' . $this->ipAddress, 10, 5) ]; } public function handle() { // Обработка запроса echo "Processing request from IP: " . $this->ipAddress; } } ?>

Результат выполнения кода:

"Processing request from IP: 192.168.1.1" "Processing request from IP: 192.168.1.1" "Processing request from IP: 192.168.1.1" "Processing request from IP: 192.168.1.1" "Processing request from IP: 192.168.1.1"

Пример с комбинированным ключом

Создадим ограничение на основе комбинации пользователя и типа действия:

<?php namespace AppJobs; use IlluminateBusQueueable; use IlluminateContractsQueueShouldQueue; use IlluminateFoundationBusDispatchable; use IlluminateQueueInteractsWithQueue; use IlluminateQueueMiddlewareRateLimited; use IlluminateQueueSerializesModels; class ActionJob implements ShouldQueue { use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; protected $userId; protected $actionType; public function __construct($userId, $actionType) { $this->userId = $userId; $this->actionType = $actionType; } public function middleware() { $key = 'user_' . $this->userId . '_' . $this->actionType; return [ new RateLimited($key, 5, 2) ]; } public function handle() { // Выполнение действия echo "Action " . $this->actionType . " performed by user " . $this->userId; } } ?>

Результат выполнения кода:

"Action export performed by user 1" "Action export performed by user 1" "Action export performed by user 1" "Action export performed by user 1" "Action export performed by user 1"

Смотрите также

  • класс tries,
    который определяет максимальное количество попыток выполнения задания
  • класс timeout,
    который задает максимальное время выполнения задания
  • класс backoff,
    который определяет задержку между повторными попытками
  • класс WithoutOverlapping,
    который предотвращает одновременное выполнение дублирующихся заданий
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить