garbetjie/laravel-queue-database

Laravel queue driver for the database with optimistic queue locking.

1.3.3 2021-03-11 07:50 UTC

This package is auto-updated.

Last update: 2024-11-11 16:00:19 UTC


README

A database queue driver for Laravel with optimistic locking and job count caching. Heavily inspired by the article at https://ph4r05.deadcode.me/blog/2017/12/23/laravel-queues-optimization.html, and the relevant package at https://github.com/ph4r05/laravel-queue-database-ph4.

Installation

  1. Install this package using composer:
composer require garbetjie/laravel-database-queue
  1. Run the migration to alter the jobs table. If you haven't yet run the command to create the jobs table, do so first (./artisan queue:table).
php artisan garbetjie:database-queue:table
php artisan migrate
  1. Replace the database driver in your queue connection with database-garbetjie:
<?php
// In config/queue.php:

return [
    'connections' => [
        'database' => [
            'driver' => 'database-garbetjie',
            'table' => 'jobs',
            'queue' => 'default',
            'retry_after' => 60,
            'prefetch' => 5,
            'shuffle' => true,
        ]
    ], 
];
  1. Optionally, you can also create a "cache" table for job counts.

    If you have many jobs in your queue, running a query like SELECT queue, COUNT(*) FROM jobs GROUP BY 1 can take a long time to yield results. Run the following command to generate migrations that will create a job count cache table, and will keep the job counts updated through the use of triggers.

php artisan garbetjie:database-queue:table-job-counts
php artisan migrate

Configuration

This queue driver extends the default database queue driver. As a result, the configuration for this queue driver is exactly the same as the original database queue driver (https://laravel.com/docs/7.x/queues#driver-prerequisites), except for some additional configuration options:

Changelog

  • 1.3.2

    • Exclude laravel/database versions >=7.30.3 <8.0, due to Dependabot alert.
  • 1.3.1

    • Exclude laravel/database versions >= 8.0 <8.22.1, due to Dependabot alert.
  • 1.3.0

    • Add support for Laravel 8.