humolot/ci4-bus

A full-featured asynchronous Job Bus for CodeIgniter 4 (Queue Worker, Failed Jobs, Delays, Retries, PM2/Supervisor-ready).

Maintainers

Package info

github.com/humolot/ci4-bus

pkg:composer/humolot/ci4-bus

Statistics

Installs: 3

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.0.2 2025-11-16 21:51 UTC

This package is auto-updated.

Last update: 2026-03-16 23:01:25 UTC


README

A full-featured asynchronous Job Bus and Queue Worker system for CodeIgniter 4 โ€” similar to Laravel Queues & Horizon, but built specifically for CI4.

Now installable via Composer:

composer require humolot/ci4-bus

โœจ Features

  • ๐Ÿš€ Dispatch async jobs using Bus::dispatch()
  • โฐ Delayed jobs (Bus::later())
  • ๐Ÿ” Automatic retry logic
  • โŒ Failed job storage & management
  • ๐Ÿงน Commands to clear jobs and failed jobs
  • ๐Ÿ”„ Retry individual or all failed jobs
  • ๐Ÿ›  bus:make to scaffold new Job classes
  • ๐Ÿงต Custom worker: bus:work
  • ๐Ÿ”ง Configurable (attempts, delay, sleep, restart cycle)
  • ๐Ÿ–ฅ๏ธ Compatible with PM2, Supervisor, Systemd, NSSM (Windows)

๐Ÿ“ฆ Installation

composer require humolot/ci4-bus

Run installer:

php spark bus:install

This will create:

app/Jobs/
app/Jobs/JobInterface.php
app/Jobs/BaseJob.php
app/Config/Bus.php
migrations for jobs & failed_jobs

Run migrations:

php spark migrate

โš™ Configuration (app/Config/Bus.php)

class Bus extends BaseConfig
{
    public int $maxAttempts       = 3;
    public int $delaySeconds      = 5;
    public int $restartAfterJobs  = 500;
    public int $sleepSeconds      = 1;
}

๐Ÿ›  Creating Jobs

Generate:

php spark bus:make SendEmailJob

Your job:

namespace App\Jobs;

class SendEmailJob extends BaseJob
{
    public function handle(array $data)
    {
        // Your logic here
    }
}

๐Ÿš€ Using the Package (Correct Path via Composer)

Import the Bus class from vendor:

use Humolot\Bus\Bus;

Bus::dispatch(\App\Jobs\SendEmailJob::class, ['id' => 10]);

Dispatch immediately

Bus::dispatch(\App\Jobs\SendEmailJob::class, [
    'email' => 'user@example.com'
]);

Dispatch later

Bus::later(60, \App\Jobs\SendEmailJob::class, [
    'email' => 'user@example.com'
]);

Bulk dispatch

Bus::bulk([
    ['class' => JobA::class, 'payload' => [...]],
    ['class' => JobB::class, 'payload' => [...], 'delay' => 10]
]);

๐Ÿงต Running the Worker

php spark bus:work

๐Ÿ”ฅ Production Worker Setup

PM2

npm install pm2 -g
pm2 start php --name ci4_bus -- spark bus:work
pm2 save
pm2 startup

Supervisor

[program:ci4_bus]
command=/usr/bin/php /var/www/project/spark bus:work
autostart=true
autorestart=true
redirect_stderr=true
stdout_logfile=/var/log/ci4_bus.log

Reload:

supervisorctl reread
supervisorctl update

Windows (NSSM)

nssm install CI4BusWorker

โŒ Failed Job Management

php spark bus:failed
php spark bus:failed:retry 12
php spark bus:retry-all
php spark bus:failed:clear

๐Ÿงน Clearing Jobs

php spark bus:clear

๐Ÿ“ Folder Structure

Because the package is now installed via Composer, the core lives in:

vendor/humolot/ci4-bus/src

Your application files remain in:

app/Jobs/
app/Config/Bus.php
app/Models/
app/Libraries/Bus.php (auto-published)

๐Ÿ“œ License

MIT License.