mingalevme/illuminate-uqueue
Laravel/Lumen uniqueable queues (Database, Redis)
48,315
21
| Install | |
|---|---|
composer require mingalevme/illuminate-uqueue |
|
| Latest Version: | 1.2.1 |
| PHP: | >=7.1 |
| License: | MIT |
| Last Updated: | Oct 15, 2020 |
| Links: | GitHub · Packagist |
Maintainer: mingalevme
illuminate-uqueue
Provides support for uniqueable queues for Laravel/Lumen 5.5+.
Travis CI
Codecov
Supported drivers:
- Database
- Redis (Based on Sorted Sets)
Installation
-
composer require mingalevme/illuminate-uqueue -
In Laravel 5.5+, the service provider and facade will automatically get registered.
For older versions of the framework or Lumen, follow the steps below:
Register the appropriate service provider
\Mingalevme\Illuminate\UQueue\LaravelUQueueServiceProvider::classor\Mingalevme\Illuminate\UQueue\LumenUQueueServiceProvider::class. -
If you plan to use the database as a driver you should add the migration (change the table name if necessary):
<?php // /src/migrations/2017_01_01_000002_jobs_add_uniqueable.php
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
class JobsAddUniqueable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
if (!Schema::hasColumn('jobs', 'unique_id')) {
Schema::table('jobs', function($table) {
$table->string('unique_id')->nullable();
$table->unique(['queue', 'unique_id'], 'jobs_queue_unique_id_unique');
});
}
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
if (Schema::hasColumn('jobs', 'unique_id')) {
Schema::table('jobs', function (Blueprint $table) {
$table->dropUnique('jobs_queue_unique_id_unique');
$table->dropColumn('unique_id');
});
}
}
}
- Create a job that implements the interface
\Mingalevme\Illuminate\UQueue\Jobs\Uniqueable:
<?php
namespace App\Jobs;
use Mingalevme\Illuminate\UQueue\Jobs\Uniqueable;
class ExampleJob implements Uniqueable
{
protected $data;
public function __construct(array $data)
{
ksort($data);
$this->data = $data;
}
public function uniqueable()
{
return md5(json_encode($this->data));
}
public function handle()
{
// ...
}
}