1. Go to this page and download the library: Download nails/module-queue 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/ */
nails / module-queue example snippets
namespace Nails\Queue\Interface;
use Nails\Queue\Resource\Worker;
interface Queue
{
/** Called once on worker startup for each queue */
public static function setup(Worker $worker): void;
/** Periodically called by the worker (~every refresh interval) */
public static function refresh(Worker $worker): void;
}
namespace Nails\Queue\Interface;
interface Task
{
/** Maximum number of retries for this task */
public static function getMaxRetries(): int;
/** Perform the work */
public function run(Data $data): void;
}
namespace Nails\Queue\Interface;
use stdClass;
interface Data
{
/** Construct with the payload to persist */
public function __construct(array|string|int|float|bool|stdClass|null $data);
/** Retrieve the raw payload */
public function get(): array|string|int|float|bool|stdClass|null;
/** JSON representation persisted to DB */
public function toJson(): string;
}
use Nails\Queue\Service\Manager;
use Nails\Queue\Interface\Task;
use Nails\Queue\Interface\Data;
use Nails\Queue\Interface\Queue;
use Nails\Queue\Resource\Job;
// Factory::service('Manager', \Nails\Queue\Constants::MODULE_SLUG)
// Queue alias registration (defaults provided for 'default' and 'priority')
Manager::addAlias(string $alias, Queue $queue): self
Manager::resolveQueue(string|Queue $alias): Queue
// Job lifecycle
Manager::push(Task $task, Data $data, Queue|string|null $queue = null, ?DateTimeInterface $availableAt = null): Job
Manager::getNextJob(array $queues, Resource\Worker $worker): ?Job
Manager::markJobAsComplete(Job $job): bool
Manager::markJobAsFailed(Job $job, Throwable $e): bool
Manager::retryJob(Job $job, Throwable $e): DateTime // schedules next attempt
// Worker lifecycle & maintenance
Manager::registerWorker(array $queues): Resource\Worker
Manager::touchWorker(Resource\Worker $worker): Resource\Worker
Manager::unregisterWorker(Resource\Worker $worker): void
Manager::deleteStaleWorkers(): Resource\Worker[]
Manager::resetStuckJobs(): Job[]
Manager::rotateOldJobs(): Job[]
// Same liveness check as the admin dashboard alert
Manager::unworkedQueues(): Queue[]
Manager::isProcessed(Queue|string $queue): bool
namespace App\Queue\Queues;
use Nails\Queue\Interface\Queue;
use Nails\Queue\Resource\Worker;
class Reports implements Queue
{
public static function setup(Worker $worker): void
{
// e.g. ensure storage directories exist
}
public static function refresh(Worker $worker): void
{
// e.g. rotate temp files, refresh API tokens, etc.
}
}
$manager = \Nails\Factory::service('Manager', \Nails\Queue\Constants::MODULE_SLUG);
$manager->addAlias('reports', new \App\Queue\Queues\Reports());
namespace App\Queue\Tasks\Reports;
use Nails\Queue\Interface\Task;
use Nails\Queue\Interface\Data;
class Generate implements Task
{
public static function getMaxRetries(): int
{
return 3;
}
public function run(Data $data): void
{
$payload = $data->get();
// do the work using $payload
}
}
use Nails\Factory;
use Nails\Queue\Constants;
$payload = (object) ['foo' => 'bar'];
$data = Factory::factory('Data', onstants::MODULE_SLUG, $payload);
namespace App\Queue\Data\Reports;
use Nails\Queue\Factory\Data;
class ReportTable extends Data
{
public static function make(string $name, array $header, array $rows)
{
$firstRow = reset($rows);
if ($firstRow && count($header) !== count($rows)) {
throw new \InvalidArgumentException(
'Header and rows must be the same length'
)
}
return new self((object) [
'name' => $name,
'header' => $header,
'rows' => $rows,
]);
}
}
// ReportTable::make('My Table', ['Foo', 'Bar'], [['Fizz', 'Buzz']])
use App\Queue\Data;
use App\Queue\Tasks;
use Nails\Factory;
use Nails\Queue\Constants;
use Nails\Queue\Service\Manager;
/** @var Manager $queue */
$manager = Factory::service('Manager', Constants::MODULE_SLUG);
$rows = [['Fizz', 'Buzz']];
$header = ['Foo', 'Bar'];
$job = $manager->push(
// The task to execute
task: new Tasks\Reports\Generate(),
// The data payload
data: Data\Reports\ReportTable::make('My Table', $header, $rows),
// alias, class name, instance, or null for default
queue: new \App\Queue\Queues\Reports(),
// optional delay
availableAt: (new DateTimeImmutable('+2 minutes'))
);
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.