iron-io / iron_worker
IronWorker 客户端库(多语言工作平台,可以在后台并行、大规模地运行任务。)
Requires
- php: >=5.2.0
- iron-io/iron_core: 1.*
This package is not auto-updated.
Last update: 2024-09-14 15:52:50 UTC
README
iron_worker_php 是 IronWorker 的 PHP 语言绑定。
IronWorker 是一个可大规模扩展的后台处理系统。 查看工作原理
入门
分支
1.*
- 与 Laravel 4.0/4.1/4.2/5.0 兼容,PHP 5.2 兼容版本。无命名空间。2.*
- 与 Laravel 5.1+ 兼容,PSR-4 兼容版本带有命名空间。master
分支 - 与2.*
相同
获取凭据
要开始使用 iron_worker_php,您需要注册并获取一个 OAuth 令牌。
- 前往 http://iron.io/ 并注册。
- 在 http://hud.iron.io/tokens 获取 OAuth 令牌
安装 iron_worker_php
使用 iron_worker_php 有两种方式
使用 composer
在项目目录中创建 composer.json
文件
{ "require": { "iron-io/iron_worker": "2.*" } }
执行 composer install
(如果需要,请安装:https://getcomposer.org.cn/download/)
并使用它
require __DIR__ . '/vendor/autoload.php'; $worker = new \IronWorker\IronWorker();
直接使用类(强烈不推荐)
- 将
src
中的类复制到目标目录 - 从 此处 获取 IronCore 类并将其复制到目标目录
- 包括所有这些
require 'src/HttpException.php'; require 'src/JsonException.php'; require 'src/IronCore.php'; require 'src/IronWorker.php'; require 'src/IronWorkerException.php'; $worker = new \IronWorker\IronWorker();
配置
配置 IronWorker 的三种方式
- 传递包含选项的数组
<?php $worker = new \IronWorker\IronWorker(array( 'token' => 'XXXXXXXXX', 'project_id' => 'XXXXXXXXX' ));
- 传递包含配置选项的 ini 文件名。将 sample_config.ini 重命名为 config.ini 并包含您的 Iron.io 凭据(token 和 project_id)
<?php $worker = new \IronWorker\IronWorker('iron.json');
-
自动配置搜索 - 将零个参数传递给构造函数,库将尝试在以下位置查找配置文件
- 当前目录中的
iron.ini
- 当前目录中的
iron.json
IRON_WORKER_TOKEN
、IRON_WORKER_PROJECT_ID
和其他环境变量IRON_TOKEN
、IRON_PROJECT_ID
和其他环境变量- 用户主目录中的
.iron.ini
- 用户主目录中的
.iron.json
- 当前目录中的
创建一个工作进程
以下是一个工作进程示例
<?php echo "Hello PHP World!\n";
上传代码到服务器
使用 CLI 工具(推荐)
- 获取 CLI 工具
- 下载或创建包含 project_id/password 的
iron.json
配置文件 - 创建
HelloWorld.worker
文件,示例
runtime 'php' exec 'HelloWorld.php'
- 上传!
$ iron_worker upload HelloWorld
工作进程示例
您可以在以下位置找到工作进程示例: iron_worker_examples
排队一个工作进程
<?php $payload = array() $options = array('label' => 'label_name', 'cluster' => 'dedicated') $task_id = $worker->postTask('HelloWorld', $payload, $options);
排队选项
- 优先级:运行任务的优先级队列。有效值为 0、1 和 2。默认为 0。
- 超时:任务的最大运行时间(秒)。没有任务可以超过 3600 秒(60 分钟)。默认为 3600,但可以设置为更短的时间。
- 延迟:在排队任务之前延迟的秒数。默认为 0。
- 标签:任务的可选文本标签。
- 集群:集群名称,例如“high-mem”或“dedicated”。这是提供给客户的高级功能,使他们能够访问更强大的或定制的工人解决方案。专用工人集群适用于希望为排队任务预留一定数量工人的用户。如果没有设置,默认值为“default”,这是公开的IronWorker集群。
调度工人
postScheduleAdvanced($name, $payload, $start_at, $label = null, $run_every = null, $end_at = null, $run_times = null, $priority = null, $cluster = null)
如果您想在特定时间间隔运行工人任务,一次在特定时间运行,或者从特定时间开始运行n次任务,您应该进行调度。
<?php $options = array('label' => 'label_name', 'cluster' => 'default'); $task_id = $worker->postSchedule('HelloWorkerRuby', $options);
调度选项
- run_every:两次运行之间的时间,以秒为单位。默认情况下,任务将只运行一次。如果设置为小于60,run_every将返回400错误。
- end_at:任务将停止排队的时间。应为一个时间或日期时间。
- run_times:任务将运行的次数。
- priority:运行作业的优先级队列。有效值为0、1和2。默认值为0。更高的值意味着
- 任务一旦离开调度,在队列中花费的时间会更少。
- start_at:计划任务首次运行的时间。
- label:可选标签,用于为计划任务添加自定义标签。
- cluster:集群名称,例如“high-mem”或“dedicated”。如果没有设置,默认值为“default”,这是公开的IronWorker集群。
工人状态
要获取工人的状态,您可以使用getTaskDetails()
方法。
<?php $task_id = $worker->postTask('HelloWorld'); $details = $worker->getTaskDetails($task_id); echo $details->status; # prints 'queued', 'complete', 'error' etc.
获取工人日志
使用任何在您的工人中打印文本的函数将消息放入日志。
<?php $task_id = $worker->postTask('HelloWorld'); sleep(10); $details = $worker->getTaskDetails($task_id); # Check log only if task is finished. if ($details->status != 'queued') { $log = $worker->getLog($task_id); echo $log; # prints "Hello PHP World!" }
加载任务数据负载
要为您的工人提供负载,只需放置一个包含您想要的任何内容的数组。
<?php $payload = array( 'key_one' => 'Helpful text', 'key_two' => 2, 'options' => array( 'option 1', 'option 2' ) ); $worker->postTask('HelloWorld', $payload); $worker->postScheduleSimple('HelloWorld', $payload, 10) $worker->postScheduleAdvanced('HelloWorld', $payload, time()+3*60, 2*60, null, 5);
当您的代码执行时,它将传递四个程序参数
- -id - 任务ID。
- -payload - 包含此特定任务数据负载的文件名。
- -d - 在运行作业时可以使用的用户可写目录。
- -config - 包含特定代码配置数据的文件名(如果可用)。
IronWorker在您的工人中提供getArgs()
、getPayload()
、getConfig()
函数来帮助您使用负载
<?php $args = getArgs(); echo "Hello PHP World!\n"; print_r($args);
设置任务优先级
您可以通过设置相应的参数来指定任务的优先级。
$options = array('priority' => 1); # Run task with medium priority $worker->postTask('HelloWorld', $payload, $options);
优先级参数的值表示运行任务的优先级队列。有效值为0、1和2。0是默认值。
设置进度状态
要设置当前任务进度,只需在您的工人中调用setProgress($percent, $message)
。
- percent - 可以设置以显示任务完成程度的百分比值。
- msg - 可以用于显示任务状态的用于人类阅读的消息字符串。
要在客户端检索此数据,请使用$worker->getTaskDetails($task_id);
故障排除
http错误:0
如果您看到未捕获的异常'Http_Exception',消息为'http错误:0 | '
,则最可能是由配置不正确的cURL https证书引起的。有两种方法可以修复此错误
- 禁用SSL证书验证 - 在IronWorker初始化后添加此行:
$worker->ssl_verifypeer = false;
- 切换到http协议 - 将此添加到配置选项:
protocol = http
和port = 80
- 修复错误!推荐解决方案:下载实际证书 - cacert.pem并将其添加到
php.ini
[PHP]
curl.cainfo = "path\to\cacert.pem"
完整文档
您可以在以下位置找到更多文档
- http://dev.iron.io iron.io产品的完整文档。
- IronWorker PHP参考.
- IronWorker PHP维基页面.
- IronWorker PHP示例
开发者注意事项
在运行 composer install
并在 Dockerworker示例 上设置本地代码的符号链接之后,您可以修改此库以测试它。有关Composer文件布局和符号链接策略的详细说明,请参阅http://blog.grossi.io/2013/testing-your-packagistcomposer-package-locally/。