PHP client for Celery task queue

PHP client for Celery task queue

README

PHP client capable of executing Celery tasks and
reading asynchronous results.

Uses AMQP extension from PECL,
the PHP AMQP implementation or
Redis and the following settings in Celery:

result_serializer = 'json'
result_expires = None
task_track_started = False

The required PECL-AMQP version is at least 1.0. Last version tested is 1.4.

Last PHP-amqplib version tested is 2.5.1.

Last predis version tested is 1.0.1.

Requires Celery 4.0+.

API documentation is dead, help wanted

POSTING TASKS

$c = new CeleryCelery('localhost', 'myuser', 'mypass', 'myvhost');
$result = $c->PostTask('tasks.add', array(2,2));

// The results are serializable so you can do the following:
$_SESSION['celery_result'] = $result;
// and use this variable in an AJAX call or whatever

tip: if using RabbitMQ guest user, set “/” vhost

READING ASYNC RESULTS

while (!$result->isReady())    {
    sleep(1);
    echo '...';
}

if ($result->isSuccess()) {
    echo $result->getResult();
} else {
    echo "ERROR";
    echo $result->getTraceback();
}

GET ASYNC RESULT MESSAGE

$c = new CeleryCelery('localhost', 'myuser', 'mypass', 'myvhost');
$message = $c->getAsyncResultMessage('tasks.add', 'taskId');

PYTHON-LIKE API

An API compatible to AsyncResult in Python is available too.

$c = new CeleryCelery('localhost', 'myuser', 'mypass', 'myvhost');
$result = $c->PostTask('tasks.add', array(2,2));

$result->get();
if ($result->successful()) {
    echo $result->result;
}

ABOUT

Based
on this blog post
and reading Celery sources. Thanks to Skrat, author
of Celerb for a tip about response
encoding. Created for the needs of my consulting work
at Massive Scale.

License is 2-clause BSD.

DEVELOPMENT

Development process and goals.

CONNECTING VIA SSL

Connecting to a RabbitMQ server that requires SSL is currently only possible
via PHP-amqplib to do so you’ll need to create a celery object with ssl
options:

$ssl_options = [
    'cafile' => 'PATH_TO_CA_CERT_FILE',
    'verify_peer' => true,
    'passphrase' => 'LOCAL_CERT_PASSPHRASE',
    'local_cert' => 'PATH_TO_COMBINED_CLIENT_CERT_KEY',
    'CN_match' => 'CERT_COMMON_NAME'
];

$c = new CeleryCelery($host, $user, $password, $vhost, 'celery', 'celery', 5671, false, 0, $ssl_options);

CONNECTING TO REDIS

Refer to files in testscenario/ for examples of celeryconfig.py.

$c = new CeleryCelery(
    'localhost', /* Server */
    '', /* Login */
    'test', /* Password */
    'wutka', /* vhost */
    'celery', /* exchange */
    'celery', /* binding */
    6379, /* port */
    'redis' /* connector */
);

Source

Add a Comment

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *