This repository contains the codebase PHP bridge using RoadRunner Jobs plugin.
To install application server and Jobs codebase
composer require spiral/roadrunner-jobs
You can use the convenient installer to download the latest available compatible version of RoadRunner assembly:
composer require spiral/roadrunner-cli --dev
vendor/bin/rr get
First you need to add at least one jobs adapter to your RoadRunner configuration. For example, such a configuration would be quite feasible to run:
rpc:
listen: tcp://127.0.0.1:6001
server:
command: php consumer.php
relay: pipes
jobs:
consume: [ "local" ]
pipelines:
local:
driver: memory
config:
priority: 10
prefetch: 10000
Note Read more about all available drivers on the documentation page.
After starting the server with this configuration, one driver named local
will be available to you.
The following code will allow writing and reading an arbitrary value from the RoadRunner server.
<?php
use Spiral\RoadRunner\Jobs\Jobs;
use Spiral\Goridge\RPC\RPC;
require __DIR__ . '/vendor/autoload.php';
// Jobs service
$jobs = new Jobs(RPC::create('tcp://127.0.0.1:6001'));
// Select "local" pipeline from jobs
$queue = $jobs->connect('local');
// Create task prototype with default headers
$task = $queue->create('ping', '{"site": "https://example.com"}') // Create task with "echo" name
->withHeader('attempts', 4) // Number of attempts to execute the task
->withHeader('retry-delay', 10); // Delay between attempts
// Push "echo" task to the queue
$task = $queue->dispatch($task);
var_dump($task->getId() . ' has been queued');
The following code will allow you to read and process the task from the RoadRunner server.
<?php
use Spiral\RoadRunner\Jobs\Consumer;
use Spiral\RoadRunner\Jobs\Task\ReceivedTaskInterface;
require __DIR__ . '/vendor/autoload.php';
$consumer = new Spiral\RoadRunner\Jobs\Consumer();
/** @var Spiral\RoadRunner\Jobs\Task\ReceivedTaskInterface $task */
while ($task = $consumer->waitTask()) {
try {
$name = $task->getName(); // "ping"
$queue = $task->getQueue(); // "local"
$driver = $queue->getDriver(); // "memory"
$payload = $task->getPayload(); // {"site": "https://example.com"}
// Process task
$task->complete();
} catch (\Throwable $e) {
$task->fail($e, requeue: true);
}
}
The MIT License (MIT). Please see LICENSE
for more information. Maintained
by Spiral Scout.