Giter Club home page Giter Club logo

celery-php's Introduction

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:

CELERY_RESULT_SERIALIZER = "json"
CELERY_TASK_RESULT_EXPIRES = None
CELERY_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.

Last Celery version tested is 3.1.19

API documentation

POSTING TASKS

$c = new Celery('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 Celery('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 Celery('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 = array(
  '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 Celery($host, $user, $password, $vhost, 'celery', 'celery', 5671, false, false, $ssl_options);

CONNECTING TO REDIS

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

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

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.