massivescale / celery-php
此包已被弃用,不再维护。未建议替代包。
Celery任务队列的PHP客户端
2.1.2
2016-10-16 07:17 UTC
Suggests
- predis/predis: Adds support for the predis, PHP client library for Redis, backend
- videlalvaro/php-amqplib: Adds support for the php-amqplib, AMQP library for PHP, backend
This package is not auto-updated.
Last update: 2021-12-04 14:40:04 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+。
发布任务
$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 */
);