eo/job-queue-bundle

允许将 Symfony2 控制台命令作为作业进行调度。

dev-master / 0.1.x-dev 2017-10-31 09:18 UTC

This package is auto-updated.

Last update: 2024-09-24 00:07:51 UTC


README

Dependencies Status

Mongodb ODM 实现用于 JMSJobQueueBundle,允许将 Symfony2 控制台命令作为作业进行调度。

先决条件

此版本的包需要 Symfony 2.1+

安装

步骤 1: 使用 composer 下载 EoJobQueueBundle

在您的 composer.json 中添加 EoJobQueueBundle

{
    "require": {
        "eo/job-queue-bundle": "dev-master"
    }
}

现在运行以下命令,让 composer 下载该包

$ php composer.phar update eo/job-queue-bundle

Composer 将将包安装到您的项目 vendor/eo 目录。

步骤 2: 启用包

在 kernel 中启用包

<?php
// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Eo\JobQueueBundle\EoJobQueueBundle(),
    );
}

步骤 3: 修改控制台基础应用程序类

app/console 使用 EoJobQueueBundle 的 Application

// use Symfony\Bundle\FrameworkBundle\Console\Application;
use Eo\JobQueueBundle\Console\Application;

步骤 4(可选):配置包

现在您已正确安装并启用了 EoJobQueueBundle,下一步是配置该包以适应您应用程序的具体需求。

要更改包使用的默认作业类,请将以下配置添加到您的 config.yml 文件中

# app/config/config.yml
eo_job_queue:
    job_class: JuliusJobBundle:Job

设置 supervisord

为了使此包正常工作,您必须确保始终运行一个(并且只有一个)控制台命令 eo-job-queue:run 的实例。您可以使用 supervisord 实现这一点。

一个示例 supervisord 配置可能如下所示

[program:eo_job_queue_runner]
command=php %kernel.root_dir%/console eo-job-queue:run --env=prod --verbose
process_name=%(program_name)s
numprocs=1
directory=/tmp
autostart=true
autorestart=true
startsecs=5
startretries=10
user=www-data
redirect_stderr=false
stdout_logfile=%capistrano.shared_dir%/eo_job_queue_runner.out.log
stdout_capture_maxbytes=1MB
stderr_logfile=%capistrano.shared_dir%/eo_job_queue_runner.error.log
stderr_capture_maxbytes=1MB

对于测试或开发,当然也可以手动运行该命令,但默认情况下它将在 15 分钟后自动退出(您可以使用 --max-runtime=seconds 选项更改此设置)。

使用方法

创建作业

创建作业非常简单,只需持久化 Job 实例即可

<?php

$job = new Job('my-symfony2:command', array('some-args', 'or', '--options="foo"'));
$dm->persist($job);
$dm->flush($job);

在作业之间添加依赖关系

如果您想让一个作业在另一个作业完成后运行,也可以很容易地实现这一点

<?php

$job = new Job('a');
$dependentJob = new Job('b');
$dependentJob->addJobDependency($job);
$dm->persist($job);
$dm->persist($dependentJob);
$dm->flush();

向作业添加相关文档

如果您想将作业链接到另一个文档,例如为了更容易地找到作业,作业提供了一个特殊的多对一关联

<?php

$job = new Job('a');
$job->addRelatedDocument($anyDocument);
$dm->persist($job);
$dm->flush();

$dm->getRepository('EoJobQueueBundle:Job')->findJobForRelatedDocument('a', $anyDocument);

安排作业

如果您想安排一个作业

<?php

$job = new Job('a');
$date = new DateTime();
$date->add(new DateInterval('PT30M'));
$job->setExecuteAfter($date);
$dm->persist($job);
$dm->flush();

许可证

此包采用 Apache2 许可证。请参阅包中的完整许可证

Resources/meta/LICENSE

报告问题或功能请求

与此包相关的问题和功能请求在 Github 问题跟踪器中跟踪 https://github.com/eymengunay/EoJobQueueBundle/issues