Giter VIP home page Giter VIP logo

laravel-unique-queue's Introduction

This redis queue driver works just like the standard Laravel redis queue driver, however, it prevents the same job from being queued multiple times.

REQUIREMENTS

Needs PHP >= 7.1 to be installed.

Requires illuminate/redis and illuminate/queue, both "~5.7"

INSTALLATION

Require via Composer

composer require mlntn/laravel-unique-queue

Configure

Create a new connection in config/queue.php

return [
    // ...
    'connections' => [
        'my_unique_name' => [
            'driver'      => 'unique',
            'connection'  => 'default',
            'queue'       => env('UNIQUE_QUEUE_NAME', 'give-me-a-name'),
            'retry_after' => 90,
        ],
        //...
    ]
];

IMPLEMENTATION

Implement a uniquely-queueable job

Your job should use the UniquelyQueueable trait:

<?php

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Mlntn\Queue\Traits\UniquelyQueueable;

class MyUniqueJob implements ShouldQueue {

    use Dispatchable, InteractsWithQueue, Queueable, UniquelyQueueable, SerializesModels;

    /* ... */

}

If the connection is not the default, you will need to specify the connection when dispatching the job:

dispatch(new UniqueJob)->onConnection('my_unique_name');

Implement a unique-queueable event

Since an Event simply encapsulates a Job, the event class should also use the UniquelyQueueable trait:

 <?php

    namespace App\Events;

    use Illuminate\Queue\SerializesModels;
    use Mlntn\Queue\Traits\UniquelyQueueable;

    class MyEvent {

        public function __construct($entityId)
        {
            $this->entityId;
        }

        public function getUniqueIdentifier()
        {
            return $this->entityId;
        }
    }

Dispatch event:

    event(new MyEvent(123));

To specify the queue, the listener has to provide the connection name

 <?php

    namespace App\Listeners;

    class MyListener {

        public $connection = env('UNIQUE_QUEUE_NAME');

        // use delay if you need
        public $delay = 10;

        public function handle(MyEvent $event) {
            // what ever you need
        }

    }

Using Lumen

Lumen handles binding slightly different. Use LumenQueueServiceProvider to enable unique queueing in Lumen.

Register service provider in app.php:

$app->register(Mlntn\Providers\LumenQueueServiceProvider::class);

Using Horizon

Set up a worker configuration:

    'worker_name' => [
        'connection' => 'my_unique_name',
        'queue'      => ['default'],
        'balance'    => 'auto',
        'processes'  => 16,
        'tries'      => 3,
    ],

Run Queue Worker

The unique queue behavior acts internally. Run queue worker as known using artisan (via cli, supervisor or another method). For more detailed information head over to https://github.com/illuminate/queue Specify the connection name used in config/queue.php

php artisan queue:work my_unique_name

laravel-unique-queue's People

Contributors

keepanitreel avatar mlntn avatar nikolaymurha avatar petr-malakhaltsev avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.