massivescale/celery-php

此包已被弃用,不再维护。未建议替代包。

Celery任务队列的PHP客户端

2.1.2 2016-10-16 07:17 UTC

README

我对这个项目没有更多的商业或个人用途。它似乎没有被任何免费软件项目使用,我肯定不会在我从未见过的某些公司的内部使用的东西上浪费时间。查看 分支,也许你会在那里找到一些适合你的东西。

感谢所有贡献者!

PHP客户端,能够执行Celery任务并读取异步结果。

使用来自 PECL 的 AMQP 扩展,PHP AMQP 实现或 Redis,以及 Celery 中的以下设置

result_serializer = 'json'
result_expires = None
task_track_started = False

所需的 PECL-AMQP 版本至少为 1.0。测试的最后一个版本是 1.4。

测试的最后一个 PHP-amqplib 版本是 2.5.1。

测试的最后一个 predis 版本是 1.0.1。

需要 Celery 4.0+。

API 文档 已失效,需要帮助

发布任务

$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

提示:如果使用 RabbitMQ guest 用户,设置 "/" 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');

类似 Python 的 API

还有一个与 Python 中的 AsyncResult 兼容的 API。

$c = new \Celery\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-clause BSD。

开发

开发过程和目标。

通过 SSL 连接

目前仅通过 PHP-amqplib 可以连接到需要 SSL 的 RabbitMQ 服务器,为此您需要创建一个带有 ssl 选项的 celery 对象

$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);

连接到 Redis

请参阅 testscenario/ 中的文件,以获取 celeryconfig.py 的示例。

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