jjbubudi / celery-php
Celery任务队列的PHP客户端
此包的规范存储库似乎已丢失,因此该包已被冻结。
dev-master / 2.0.x-dev
2015-02-07 16:45 UTC
Requires
- predis/predis: 0.8.5
- videlalvaro/php-amqplib: >=2.4.0
This package is not auto-updated.
Last update: 2019-04-09 05:34:38 UTC
README
能够执行Celery任务并读取异步结果的PHP客户端。
使用来自PECL的AMQP扩展、PHP AMQP实现或Redis,以及Celery中的以下设置
CELERY_RESULT_SERIALIZER = "json"
CELERY_TASK_RESULT_EXPIRES = None
PECL-AMQP自1.0.0版本起支持,因为它的API在进入1.0时被完全重写。0.3版本有一个单独的分支。
测试过的最后一个PHP-amqplib版本是2.2.6。
测试过的最后一个Celery版本是3.1.11
发布任务
$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
读取异步结果
while(!$result->isReady())
{
sleep(1);
echo '...';
}
if($result->isSuccess())
{
echo $result->getResult();
}
else
{
echo "ERROR";
echo $result->getTraceback();
}
获取异步结果消息
$c = new Celery('localhost', 'myuser', 'mypass', 'myvhost');
$message = $c->getAsyncResultMessage('tasks.add', 'taskId);
Python-like API
还提供了与Python的AsyncResult兼容的API。
$c = new Celery('localhost', 'myuser', 'mypass', 'myvhost');
$result = $c->PostTask('tasks.add', array(2,2));
$result->get();
if($result->successful())
{
echo $result->result;
}
关于
基于这篇博客文章和阅读Celery源代码。感谢Skrat,Celerb的作者,他提供了一个有关响应编码的建议。为满足我在Massive Scale的咨询工作需要而创建。许可证是2条款BSD。
目前PHP-amqplib的支持是实验性的。它通过了大多数单元测试,尽管如此,应该可以安全使用。
支持
如果您需要帮助将Celery集成到您的PHP应用程序中,您可能有兴趣聘请我作为顾问。
通过SSL连接
目前,要通过PHP-amqplib连接到需要SSL的RabbitMQ服务器,您需要创建具有ssl选项的celery对象
$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);
连接到Redis
有关celeryconfig.py的示例,请参阅testscenario/中的文件。
$c = new Celery(
'localhost', /* Server */
'', /* Login */
'test', /* Password */
'wutka', /* vhost */
'celery', /* exchange */
'celery', /* binding */
6379, /* port */
'redis' /* connector */
);