lilweb / job-bundle
使用 Symfony2 执行异步任务
0.3.4
2013-12-16 17:17 UTC
Requires
- php: >=5.3.0
- mtdowling/cron-expression: 1.0.*
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 } }