I have no more commercial or personal use for this project. It doesn't seem to be used by any Free Software projects and I'm definitely not spending my spare time on something used internally by some random companies I never met. Check out the forks, maybe you'll find something that works for you there.
Thanks to all the contributors!
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
$c = new \Celery\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
while (!$result->isReady()) {
sleep(1);
echo '...';
}
if ($result->isSuccess()) {
echo $result->getResult();
} else {
echo "ERROR";
echo $result->getTraceback();
}
$c = new \Celery\Celery('localhost', 'myuser', 'mypass', 'myvhost');
$message = $c->getAsyncResultMessage('tasks.add', 'taskId');
An API compatible to AsyncResult in Python is available too.
$c = new \Celery\Celery('localhost', 'myuser', 'mypass', 'myvhost');
$result = $c->PostTask('tasks.add', array(2,2));
$result->get();
if ($result->successful()) {
echo $result->result;
}
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 process and goals.
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 \Celery\Celery($host, $user, $password, $vhost, 'celery', 'celery', 5671, false, 0, $ssl_options);
Refer to files in testscenario/
for examples of celeryconfig.py.
$c = new \Celery\Celery(
'localhost', /* Server */
'', /* Login */
'test', /* Password */
'wutka', /* vhost */
'celery', /* exchange */
'celery', /* binding */
6379, /* port */
'redis' /* connector */
);