uafrica/delayed-jobs

一个 CakePHP 插件,用于管理并处理具有优先级和重试的背景任务

此包的规范存储库似乎已消失,因此该包已被冻结

安装数: 74,437

依赖项: 0

建议者: 0

安全: 0

星标: 8

关注者: 11

分支: 2

开放问题: 6

类型:cakephp-plugin

v10.3.0 2021-03-29 10:51 UTC

README

此延迟任务模块由 Jaco Roux 为 uAfrica 电子商务平台构建。

一个插件,允许您加载具有异步处理的优先级任务。这是一个可扩展的插件,可以在多个应用服务器上执行以分发负载。它使用数据库和 RabbitMQ 服务器组合来管理任务队列。

要求

安装

  1. 使用 composer 需要插件 $ composer require uafrica/delayed-jobs
  2. 通过运行 bin/cake plugin load DelayedJobs 加载插件
  3. 通过运行 bin/cake migrations migrate --plugin DelayedJobs 设置数据库

运行工作器

要运行单个工作器,请运行 bin/cake worker -v。要运行多个工作器,请运行 bin/cake watchdog --workers x (其中 x 是要运行的数目)

建议使用类似 SupervisorD 的工具来运行多个工作器。

入队任务

    $job = new \DelayedJob\DelayedJob\Job();
    $job->setWorker('RunJob') //References a \App\Worker\RunJobWorker class
        ->setPayload($payload) //An array of payload data 
        ->setRunAt(new Time('+1 hour')) //Run this job in an hour
        ->setPriority('10'); //Priority of 10

    \DelayedJob\DelayedJob\JobManager::instance()
        ->enqueue($job);

或者,您可以使用 \DelayedJob\DelayedJob\EnqueueTrait,它提供了 enqeue($worker, $payload, $options) 方法。

创建工作器

简单地在 Worker 命名空间中创建一个类,实现 \DelayedJob\Worker\JobWorkerInterface

例如

namespace DelayedJobs\Worker;

use DelayedJobs\DelayedJob\Job;
use DelayedJobs\Result\Success;

/**
 * Class TestWorker
 */
class TestWorker implements JobWorkerInterface
{
    /**
     * @param \DelayedJobs\DelayedJob\Job $job The job that is being run.
     * @return bool
     */
    public function __invoke(Job $job)
    {
        return new Success('We ran!')
    }
}