Laravel Balanced Queue, створений YanGusik, керує розподілом черги між групами користувачів з контролем одночасного виконання на користувача та кількома стратегіями партиціювання, щоб уникнути монополізації черги.
Стандартні Laravel-черги обробляють завдання за принципом FIFO. Якщо User A надсилає 10 000 завдань, а User B — 5, то User B чекатиме, поки не завершаться всі завдання User A. Laravel Balanced Queue ділить чергу на партиції — зазвичай по одній на користувача або tenant — і по черзі обходить їх, даючи кожному справедливий доступ до воркерів.
Додайте трейд BalancedDispatchable до ваших класів завдань:
use Illuminate\Contracts\Queue\ShouldQueue;
use YanGusik\BalancedQueue\Jobs\BalancedDispatchable;
class GenerateAIImage implements ShouldQueue
{
use BalancedDispatchable;
public function __construct(
public int $userId,
public string $prompt
) {}
public function handle(): void
{
// AI generation logic
}
}
Відправляйте завдання через з'єднання balanced:
GenerateAIImage::dispatch($userId, $prompt)->onConnection('balanced');
Пакет автоматично визначає ключі партиції за властивостями на кшталт $userId, $user_id або $tenantId, групуючи завдання кожного користувача в окрему партицію.
У config/balanced-queue.php є три стратегії ротації: round-robin (за замовчуванням) циклічно проходить партиції в жорсткому порядку для рівномірного розподілу, random обирає партицію ймовірнісно для високопродуктивних сценаріїв, а smart віддає перевагу меншим чергам, щоб уникнути голодування при різних обсягах завдань між користувачами.
Пакет дозволяє задати max_concurrent у config/balanced-queue.php, щоб обмежити, скільки завдань із однієї партиції можуть виконуватися одночасно:
'limiters' => [
'simple' => [
'max_concurrent' => 2,
],
],
Це запобігає витісненню інших користувачів з усіх воркерів і допомагає керувати лімітами API, коли завдання роблять зовнішні запити.
Слідкуйте за станом партицій командою php artisan balanced-queue:table --watch для оновлень у реальному часі — вона показує очікувані завдання та активних воркерів по партиціях. Пакет також містить команди для очищення черг та програмний API метрик для власних дашбордів.
Пакет працює з Laravel Horizon. Налаштуйте supervisor у config/horizon.php, використовуючи з'єднання balanced, і застосовуйте php artisan balanced-queue:table для точних метрик, оскільки лічильники pending у Horizon не відображають структуру розбитих партицій.
Щоб дізнатися більше про Laravel Balanced Queue і переглянути код, відвідайте GitHub repository. Пакет вимагає PHP 8.0+ та Laravel 9.0+, з Redis як драйвером черги.
Laravel пропонує зручні методи для роботи з датами, які значно спрощують запити до бази даних. Досліджуйте, як ці інтуїтивно зрозумілі функції допомагають створювати чіткі та зрозумілі умови для роботи з часовими даними!
Вперше у світі Laravel з'являється можливість, яка значно спростить ваше повсякденне програмування завдяки новому пакету Laravel Boost. Читайте статтю, щоб дізнатися, як посилена інтеграція штучного інтелекту може підвищити ефективність вашої роботи та оптимізувати створення проектів у Laravel
Ви знали, що в одному додатку Laravel можна реалізувати кілька API? У нашій статті ви дізнаєтеся, як за допомогою Scramble легко документувати різні версії API та налаштувати доступ до документації, щоб зробити її публічною або приватною. Читайте далі, щоб дізнатися більше