iron-io/iron_worker

IronWorker 客户端库(多语言工作平台,可以在后台并行、大规模地运行任务。)

2.0.4 2015-09-25 18:04 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 令牌。

  1. 前往 http://iron.io/ 并注册。
  2. 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();
直接使用类(强烈不推荐)
  1. src 中的类复制到目标目录
  2. 此处 获取 IronCore 类并将其复制到目标目录
  3. 包括所有这些
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_TOKENIRON_WORKER_PROJECT_ID 和其他环境变量
    • IRON_TOKENIRON_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

.worker 语法参考

工作进程示例

您可以在以下位置找到工作进程示例: 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证书引起的。有两种方法可以修复此错误

  1. 禁用SSL证书验证 - 在IronWorker初始化后添加此行:$worker->ssl_verifypeer = false;
  2. 切换到http协议 - 将此添加到配置选项:protocol = httpport = 80
  3. 修复错误!推荐解决方案:下载实际证书 - cacert.pem并将其添加到php.ini
[PHP]

curl.cainfo = "path\to\cacert.pem"

完整文档

您可以在以下位置找到更多文档

开发者注意事项

在运行 composer install 并在 Dockerworker示例 上设置本地代码的符号链接之后,您可以修改此库以测试它。有关Composer文件布局和符号链接策略的详细说明,请参阅http://blog.grossi.io/2013/testing-your-packagistcomposer-package-locally/