PHPackages                             campelo/laravel-queue-control - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Caching](/categories/caching)
4. /
5. campelo/laravel-queue-control

ActiveLibrary[Caching](/categories/caching)

campelo/laravel-queue-control
=============================

Queue orchestration and job control for Laravel. Cancel jobs, clear queues, pause workers, and manage job batches with ease.

v1.0.0(3mo ago)00MITPHPPHP ^8.1

Since Feb 15Pushed 3mo agoCompare

[ Source](https://github.com/campeloneto1/laravel-queue-control)[ Packagist](https://packagist.org/packages/campelo/laravel-queue-control)[ RSS](/packages/campelo-laravel-queue-control/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (6)Versions (2)Used By (0)

Laravel Queue Control
=====================

[](#laravel-queue-control)

**Operational control for Laravel queues.** Cancel jobs, clear queues, pause workers, and manage campaigns with ease.

Horizon vs Queue Control
------------------------

[](#horizon-vs-queue-control)

Laravel HorizonQueue Control**Focus**ObservabilityOperational Control**Monitors queues**YesYes**Shows metrics**YesYes**Cancel pending jobs**NoYes**Cancel by campaign**NoYes**Cancel by job type**NoYes**Clear queues**NoYes**Pause/Resume workers**NoYes**Use Horizon to watch. Use Queue Control to act.**

The Problem
-----------

[](#the-problem)

You dispatched 15,000 email jobs for a newsletter. Then you realized the email content was wrong. With Horizon, you can only watch them go out. With Queue Control:

```
php artisan queue-control:cancel --campaign=newsletter-42
```

Done. All pending jobs cancelled.

Requirements
------------

[](#requirements)

- PHP 8.1+
- Laravel 10.x or 11.x
- Redis or Database queue driver

Installation
------------

[](#installation)

```
composer require campelo/laravel-queue-control
```

Publish and migrate:

```
php artisan vendor:publish --provider="Campelo\QueueControl\QueueControlServiceProvider"
php artisan migrate
```

Quick Start
-----------

[](#quick-start)

### 1. Add the trait to your jobs

[](#1-add-the-trait-to-your-jobs)

```
use Campelo\QueueControl\Traits\Cancellable;

class SendEmailJob implements ShouldQueue
{
    use Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
    use Cancellable;

    public function handle()
    {
        // Your job logic
    }
}
```

### 2. Dispatch with campaign ID

[](#2-dispatch-with-campaign-id)

```
// Group related jobs with a campaign ID
SendEmailJob::dispatch($user)->withCampaign('newsletter-42');
SendPushJob::dispatch($user)->withCampaign('newsletter-42');
```

### 3. Cancel when needed

[](#3-cancel-when-needed)

```
# Cancel entire campaign (any job type)
php artisan queue-control:cancel --campaign=newsletter-42

# Cancel by job class
php artisan queue-control:cancel --job="App\Jobs\SendEmailJob"

# Cancel specific job by UUID
php artisan queue-control:cancel --uuid=550e8400-e29b-41d4-a716-446655440000
```

Key Features
------------

[](#key-features)

### Campaigns

[](#campaigns)

Campaigns let you group different job types semantically:

```
// All these jobs belong to the same campaign
SendEmailJob::dispatch($user)->withCampaign('black-friday-2024');
SendSmsJob::dispatch($user)->withCampaign('black-friday-2024');
SendPushJob::dispatch($user)->withCampaign('black-friday-2024');

// Cancel all at once
QueueControl::cancelCampaign('black-friday-2024');
```

This is more powerful than batches because:

- Groups multiple job types
- Semantic naming (meaningful IDs)
- Closer to real-world operations

### Queue Pause/Resume

[](#queue-pauseresume)

```
# Pause - jobs are held, not lost
php artisan queue-control:pause emails

# Resume - processing continues
php artisan queue-control:resume emails
```

### Dashboard

[](#dashboard)

Access at `/queue-control`:

- Real-time queue statistics
- Job success/failure rates
- Campaign monitoring
- Queue controls

Configuration
-------------

[](#configuration)

```
// config/queue-control.php
return [
    // Simple: list of user IDs
    'allowed_users' => [1, 2, 3],

    // Advanced: granular permissions per action
    'permissions' => [
        'pause'  => ['admin', 'ops'],
        'resume' => ['admin', 'ops'],
        'cancel' => ['admin', 'ops', 'support'],
        'clear'  => ['admin'],
    ],

    'dashboard' => [
        'enabled' => true,
        'path' => 'queue-control',
        'middleware' => ['web', 'auth'],
    ],
];
```

### Environment Variables

[](#environment-variables)

```
QUEUE_CONTROL_ALLOWED_USERS=1,2,3
QUEUE_CONTROL_DASHBOARD_PATH=queue-control
```

Artisan Commands
----------------

[](#artisan-commands)

```
# List queues
php artisan queue-control:list

# Statistics
php artisan queue-control:stats
php artisan queue-control:stats --queue=emails --hours=24

# Clear queue
php artisan queue-control:clear emails

# Cancel jobs
php artisan queue-control:cancel --campaign=newsletter-42
php artisan queue-control:cancel --job="App\Jobs\SendEmailJob"
php artisan queue-control:cancel --batch=batch-uuid
php artisan queue-control:cancel --uuid=job-uuid

# Pause/Resume
php artisan queue-control:pause emails
php artisan queue-control:resume emails

# Cleanup old records
php artisan queue-control:cleanup
```

Using the Facade
----------------

[](#using-the-facade)

```
use Campelo\QueueControl\Facades\QueueControl;

// Campaigns
QueueControl::cancelCampaign('newsletter-42');
QueueControl::isCampaignCancelled('newsletter-42');

// Jobs
QueueControl::cancelJob($uuid);
QueueControl::cancelJobsByClass(SendEmailJob::class);

// Queues
QueueControl::getQueues();
QueueControl::getQueueSize('emails');
QueueControl::clearQueue('emails');
QueueControl::pauseQueue('emails');
QueueControl::resumeQueue('emails');
QueueControl::isQueuePaused('emails');

// Batches
$batch = QueueControl::createBatch('Newsletter #42', 15000);
QueueControl::cancelBatch($batch->batch_id);
```

Granular Permissions
--------------------

[](#granular-permissions)

Queue Control supports fine-grained access control:

```
'permissions' => [
    'pause'  => ['admin'],           // Only admins can pause
    'resume' => ['admin', 'ops'],    // Admin and ops can resume
    'cancel' => ['admin', 'ops'],    // Admin and ops can cancel
    'clear'  => ['admin'],           // Only admins can clear
],
```

Works with:

- **User IDs**: `[1, 2, 3]`
- **Roles**: `['admin', 'ops']` (requires Spatie Permissions or similar)
- **Gates**: Define `queue-control.pause`, `queue-control.cancel`, etc.

How It Works
------------

[](#how-it-works)

### Job Cancellation

[](#job-cancellation)

1. When you cancel, the ID is stored in cache (fast) and database (persistent)
2. Before each job runs, `Queue::before` checks if it's cancelled
3. Cancelled jobs are deleted without executing

### Queue Pausing

[](#queue-pausing)

1. Pause sets a flag in cache
2. Workers release jobs back to queue with delay
3. Jobs are held, not lost
4. Resume removes the flag

API Endpoints
-------------

[](#api-endpoints)

MethodEndpointDescriptionGET`/api/queue-control/dashboard`Dashboard statsGET`/api/queue-control/queues`List queuesPOST`/api/queue-control/queues/{queue}/clear`Clear queuePOST`/api/queue-control/queues/{queue}/pause`Pause queuePOST`/api/queue-control/queues/{queue}/resume`Resume queuePOST`/api/queue-control/jobs/cancel`Cancel by UUIDPOST`/api/queue-control/jobs/cancel-by-class`Cancel by classGET`/api/queue-control/metrics`Job metricsGET`/api/queue-control/batches`List batchesPOST`/api/queue-control/batches/{id}/cancel`Cancel batchCleanup
-------

[](#cleanup)

Schedule cleanup to remove old records:

```
// Laravel 10
$schedule->command('queue-control:cleanup')->daily();

// Laravel 11
Schedule::command('queue-control:cleanup')->daily();
```

License
-------

[](#license)

MIT License. See [LICENSE](LICENSE) for details.

###  Health Score

33

—

LowBetter than 75% of packages

Maintenance82

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity42

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

92d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/9f3acde28c4144b8432fbcd2fbaeaeb877c63519b556724f7f4d920842a9eb81?d=identicon)[campeloneto1](/maintainers/campeloneto1)

---

Tags

laravelredisqueuebatchcontroljobsworkerhorizonorchestrationcancel

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/campelo-laravel-queue-control/health.svg)

```
[![Health](https://phpackages.com/badges/campelo-laravel-queue-control/health.svg)](https://phpackages.com/packages/campelo-laravel-queue-control)
```

###  Alternatives

[laravel/horizon

Dashboard and code-driven configuration for Laravel queues.

4.1k84.2M225](/packages/laravel-horizon)[yangusik/laravel-balanced-queue

Laravel queue management with load balancing between partitions (user groups)

786.4k](/packages/yangusik-laravel-balanced-queue)[namoshek/laravel-redis-sentinel

An extension of Laravels Redis driver which supports connecting to a Redis master through Redis Sentinel.

38679.0k](/packages/namoshek-laravel-redis-sentinel)[monospice/laravel-redis-sentinel-drivers

Redis Sentinel integration for Laravel and Lumen.

103830.5k](/packages/monospice-laravel-redis-sentinel-drivers)[harris21/laravel-fuse

Circuit breaker for Laravel queue jobs. Protect your workers from cascading failures.

3786.5k](/packages/harris21-laravel-fuse)[pdffiller/qless-php

PHP Bindings for qless

29113.2k1](/packages/pdffiller-qless-php)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
