PHP code example of berlioz / queue-manager

1. Go to this page and download the library: Download berlioz/queue-manager library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

berlioz / queue-manager example snippets


use Berlioz\QueueManager\Job\JobHandlerManager;

$manager = new JobHandlerManager($container, $defaultHandler);
$manager->addHandler('email', EmailJobHandler::class);
$manager->addHandler('report', ReportJobHandler::class);

$job = new Job('email'); // Example job with name 'email'
$manager->handle($job); // Delegates to EmailJobHandler

use Berlioz\QueueManager\Handler\JobHandlerInterface;
use Berlioz\QueueManager\Job\JobInterface;
use Berlioz\QueueManager\Exception\QueueManagerException;

class FooJobHandler implements JobHandlerInterface
{
    public function handle(JobInterface $job): void
    {
        if ($job->getName() !== 'foo') {
            throw new QueueManagerException('Invalid job name');
        }

        // Process the job
        $payload = $job->getPayload();
        echo "Processing job 'foo' with payload: " . json_encode($payload);
    }
}

use Berlioz\QueueManager\Queue\MemoryQueue;
use Berlioz\QueueManager\Worker;
use Berlioz\QueueManager\WorkerOptions;
use Berlioz\QueueManager\Handler\JobHandlerManager;
use Psr\Log\NullLogger;

// Create a Job Handler Manager
$jobHandler = new JobHandlerManager($container);

// Initialize the Worker
$worker = new Worker($jobHandler);

// Optionally, set a logger
$worker->setLogger(new NullLogger());

// Configure worker options
$options = new WorkerOptions(
    name: 'worker',       // Worker name
    limit: 10,            // Max jobs to execute
    memoryLimit: 128,     // Memory limit in MB
    timeLimit: 60,        // Time limit in seconds
    killFilePath: 10,     // File to kill process
    sleep: 2,             // Sleep time between jobs in seconds
    stopNoJob: true,      // Stop if no job
    backoffTime: 0,       // Time to wait before retry failed job
    backoffMultiplier: 1, // Multiplier for backoff time
);

// Create a queue instance
$queue = new MemoryQueue();

// Run the worker
$exitCode = $worker->run($queue, $options);

use Berlioz\QueueManager\Queue\DbQueue;
use Hector\Connection\Connection;

$dbConnection = new Connection('mysql://localhost:3306');
$queue = new DbQueue(
    connection: $dbConnection, // Database connection
    name: 'default',           // Queue name
    tableName: 'queue_jobs',   // Name of MySQL table
    retryTime: 30,             // Time to wait after failed job
    maxAttempts: 5,            // Maximum attempts of a job
);

use Berlioz\QueueManager\Queue\MemoryQueue;

$queue = new MemoryQueue(
    name: 'default', // Queue name
    retryTime: 30,   // Time to wait after failed job
);

use Aws\Sqs\SqsClient;
use Berlioz\QueueManager\Queue\AwsSqsQueue;

$queue = new AwsSqsQueue(
    sqsClient: new SqsClient(...), // Database connection
    name: 'default',               // Queue name
    queueUrl: '...',               // AWS queue URL
    retryTime: 30,                 // Time to wait after failed job
);

use Redis;
use Berlioz\QueueManager\Queue\RedisQueue;

$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

$queue = new RedisQueue(
  redis: $redis,    // Redis connection
  name: 'default',  // Queue name
);

use Berlioz\QueueManager\Queue\AmqpQueue;
use AMQPConnection;

$connection = new AMQPConnection([
  'host'     => 'localhost',
  'port'     => 5672,
  'login'    => 'guest',
  'password' => 'guest',
  'vhost'    => '/',
]);
$connection->connect();

$queue = new AmqpQueue(
  connection: $connection, // AMQP connection
  name: 'default',         // Queue name
  maxAttempts: 5,          // Maximum retry attempts
);