reyesoft / reactive-laravel-jobs
Reactive Laravel Jobs
Installs: 6 422
Dependents: 0
Suggesters: 0
Security: 0
Stars: 1
Watchers: 1
Forks: 0
Open Issues: 0
Requires
- php: ^8.1
- illuminate/database: ^9.0|^10.0|^11.0
- illuminate/queue: ^9.0|^10.0|^11.0
- illuminate/support: ^9.0|^10.0|^11.0
Requires (Dev)
- ext-mbstring: *
- larastan/larastan: 2.9.6
- orchestra/testbench: ^7.9.0
- phpunit/phpunit: ^9.5.10
- reyesoft/ci: 2.0.0
This package is auto-updated.
Last update: 2024-11-23 20:48:14 UTC
README
Installation
composer require reyesoft/reactive-laravel-jobs
Features
- A same job dispatched various times can be grouped based on some value, like user_id.
- Delay time can be changed (takes last delay value).
Fantastic Laravel jobs types
Debounce Laravel Job
Dispatch delayed job only after delay value and passed without another job dispatched.
use Reyesoft\ReactiveLaravelJobs\Debounce\Debounceable; use Reyesoft\ReactiveLaravelJobs\Debounce\ShouldDebounce; final class DebouncedNotificationJob implements ShouldDebounce { use Debounceable; use Dispatchable; use Queueable; public $param1 = ''; public function __construct($param1) { $this->param1 = $param1; } public function uniqueId() { return $this->param1; } public function debouncedHandle(): void { echo PHP_EOL . $this->param1; } }
DebouncedNotificationJob::dispatchDebounced('You have 1 item.')->delay(5); DebouncedNotificationJob::dispatchDebounced('You have 2 items.')->delay(5); DebouncedNotificationJob::dispatchDebounced('You have 3 items.')->delay(5); sleep(10); DebouncedNotificationJob::dispatchDebounced('You have 4 items.')->delay(5); sleep(1); DebouncedNotificationJob::dispatchDebounced('You have 5 items.')->delay(5); // Do You have 3 items. You have 5 items.
Throttle Laravel Job
Dispatch delayed job, then ignores subsequent dispatched jobs for a duration determined by delay value, then repeats this process when.
On Laravel 9, it can be done with Unique Jobs.
use Illuminate\Contracts\Queue\ShouldQueue; use Illuminate\Contracts\Queue\ShouldBeUnique; class ThrottledNotificationJob implements ShouldQueue, ShouldBeUnique { public $param1 = ''; public function __construct($param1) { $this->param1 = $param1; } /** * The number of seconds after which the job's unique lock * will be released. */ public $uniqueFor = 3600; public function uniqueId() { return $this->param1; } public function handle(): void { echo PHP_EOL . $this->param1; } }
ThrottledNotificationJob::dispatch('You have 1 item.')->delay(5); ThrottledNotificationJob::dispatch('You have 2 items.')->delay(5); ThrottledNotificationJob::dispatch('You have 3 items.')->delay(5); sleep(10); ThrottledNotificationJob::dispatch('You have 4 items.')->delay(5); sleep(1); ThrottledNotificationJob::dispatch('You have 5 items.')->delay(5); // Do You have 1 item. You have 4 items.
Testing
composer autofix
composer test