lilweb/job-bundle

使用 Symfony2 执行异步任务

0.3.4 2013-12-16 17:17 UTC

This package is not auto-updated.

Last update: 2024-09-14 14:41:32 UTC


README

1. 配置 composer.json 文件

composer.json 文件中添加

"require": {
    "lilweb/job-bundle": "dev-master"
}

也可以通过命令行完成

$> composer require lilweb/job-bundle

2. 启用包

在 app/AppKernel.php 中

<?php
    public function registerBundles()
    {
        $bundles = array(
            // ...
            new Lilweb\JobBundle\LilwebJobBundle(),
        );

        // ...
    }

3. 配置包

在文件 app/config/config.yml 中配置 lilweb_job 节点,如下所示

lilweb_job:
    job_file: %kernel.root_dir%/%job_file% # Fichier XML décrivant l'architecture des jobs et des taches

由于所有关于任务执行的内容都需要单独记录日志,所以为 monolog 定义一个 'jobs' 处理程序,如下所示

monolog:
    handlers:
        job_handler:
            type: stream
            path: %job_logs_file%
            level: debug
            channels: jobs
        swift_handler:
            type:       swift_mailer
            from_email: %swift_handler_from%
            to_email:   %swift_handler_from%
            subject:    "[MY APP] Une erreur est survenue lors de l'exécution des jobs"
            level:      err
            channels:   jobs

注意:在此处,应用程序被配置为在发生一定程度的错误时发送电子邮件。

4. 定义任务/作业

任务和作业的定义在一个 XML 文件中完成。以下是该文件的架构

<?xml version="1.0" encoding="UTF-8" ?>
<config>
    <tasks>
        <task name="import:csv" service-id="lilweb:import_csv">
            <max-parallel-execution value="2" />
        </task>
        <task name="calcul:besoin" service-id="lilweb:calcul_besoin">
        </task>
        <task name="export:csv" service-id="lilweb:export_csv">
        </task>
        <task name="export:ftp" service-id="lilweb:export_ftp">
        </task>
    </tasks>
    <jobs>
        <job name="besoin:all" schedulable="true">
            <task name="import:csv" />
            <task name="calcul:besoin" />
            <task name="export:csv" />
            <task name="export:ftp" />
        </job>
    </jobs>
</config>

4.1 任务定义

每个任务都在 <tasks> 节点中定义。

## BALISE <task>
Attributs obligatoires:
    - service-id: Nom du service a exécuté lors du lancement de l'ordonnanceur
    - name:       Nom de la tache (également repris dans la configuration des jobs)
Balises optionnelles:
    - <max-parallel-execution>: Configure le maximum d'exécution en parallèle de la tache

## BALISE <max-parallel-execution>
Attributs obligatoires:
    - value: Un nombre (-1 pour illimité)

4.2 作业定义

每个作业都在 <jobs> 节点中定义。

## BALISE <job>
Attributs obligatoires:
    - name:  Nom du job
Attributs optionnels:
    - schedulable: valeur par défaut false, passer a true si le scheduler doit traiter le job.
Balises obligatoires:
    - <task>: Au moins une tache doit être définie pour un job. Cette tache est en quelque sorte
              une sorte de pointer vers une des taches définie plus haut, de ce fait les attributs
              'name' doivent correspondrent.

4.3 服务定义

每个任务(例如导入 CSV、导出 FTP...)都有自己的行为。因此,它必须在一个继承自 AbstractTaskService 的服务(例如 lilweb.abstract_task)中定义,以便合理化任务的执行。

配置方面

lilweb.import_csv:
    class: %lilweb.import_csv.class%
    parent: lilweb.abstract_task

PHP 方面

use Lilweb\JobBundle\Entity\TaskInfo;
use Lilweb\JobBundle\Services\AbstractTaskService;

class ImportCsv extends AbstractTaskService
{
    /**
     * {@inheritdoc}
     */
    public function execute(TaskInfo $info)
    {
        // Traitement de la tache
        // Logging de ce qui se passe
    }
}