akandels / furnace
Zend Framework 2模块,用于管理具有依赖关系的优先队列中的工作,状态报告和跟踪。
Requires
- php: >=5.3.3
- akandels/contain: dev-master
- akandels/contain-mapper: dev-master
- mwillbanks/zfc-twitter-bootstrap: dev-master
- zendframework/zendframework: >=2.0.0
Requires (Dev)
- phpunit/php-code-coverage: >=1.2.3
- phpunit/php-file-iterator: >=1.3.3
- phpunit/php-text-template: >=1.1.3
- phpunit/php-timer: >=1.0.4
- phpunit/php-token-stream: >=1.1.5
- phpunit/phpunit: >=3.7.7
- phpunit/phpunit-mock-objects: >=1.2.1
Suggests
- symfony/yaml: >=2.1.0
This package is not auto-updated.
Last update: 2024-09-14 14:03:45 UTC
README
Furnace是Zend Framework 2模块,提供用于管理后台任务和处理的直观用户界面。它处理优先级、依赖关系、历史记录和事件记录、状态更新和调度。
功能
Furnace支持以下功能集
- 启动和停止运行中的工作
- 跟踪工作状态(排队、待处理、开始、错误、完成、失败)
- 历史记录和事件记录(带备注)
- 依赖关系管理(在A工作完成之前不要运行B工作)
- 调度(每日、每周、每月)
- 通过UI创建、查看、编辑和删除工作的CRUD接口
- 搜索
- 工作执行日志和实时检查
- 报告:运行时间趋势、错误百分比等。
消息队列
Furnace对实际如何运行工作不敏感,无论是同步还是异步。一种常见方法是使用消息队列,如
- RabbitMQ
- ActiveMQ
- Gearman
- Zend Job Queue
您只需扩展一个接口,并在新类中实现一个run()
方法,并将其注册到ZF2服务管理器中,就可以将Furnace集成到您的应用程序中。有关将Furnace与各种消息队列集成的代码示例,请参阅examples/
目录。
为什么?
通常使用像cron这样的系统来运行后台工作,用于
- 备份
- 生成报告
- 发送计划电子邮件
- 清理(日志删除、临时文件删除等)
对这项工作的执行可见性常常被忽视。通常通过电子邮件报告故障,而缺乏足够的信息来帮助诊断问题。Furnace位于您已经使用的系统(cron等)之上,以安排和监视这些工作,提供更多信息。
安装
要安装Furnace,只需将composer模块添加到您的ZF2项目的composer.json中
"require": {
"akandels/furnace": "dev-master"
...
然后在您的项目配置中启用它
'modules' => array(
'Furnace',
...
您可以通过新路由访问Furnace:http://your-project.org/furnace
要配置Furnace,请将以下内容添加到您的项目配置中(通常是:config/module.config.php)
return array(
'furnace' => array(
'jobs' => array(
'class_template' => 'Project%sJob',
'class_terminate' => 'ProjectTerminateJob',
),
),
...
'service_manager' => array(
'invokables' => array(
'ProjectMainJob' => 'Path\To\MainJob',
'ProjectTerminateJob' => 'Path\To\TerminateJob',
...
然后您需要创建并注册至少两个类(上面的Path\To...)。带有“Terminate”的类用于停止工作,带有“Main”的类用于启动工作。每个类都应该实现Furnace\Jobs\JobInterface
并包含run()
方法
public function run(\Furnace\Entity\Job $job)
{
// code to start the job
}
$job
类包含以下方法
getSchedule() // daily, weekly, monthly, once
getName() // job name
getPriority() // priority
getDependencies()
getHistory()
getPidOf()
getMessages()
getLogs()
自动执行
如果您想自动执行工作,您还需要创建一个心跳调用,通常使用cron等
*/5 * * * * /path/to/application/public/index.php furnace 1>/dev/null
Furnace将自动启动所有依赖关系都满足的待处理状态的工作(按其优先级顺序)。它将根据每个心跳继续启动工作。
Furnace还会至少重试失败的作业3次(之后需要从UI手动重启)。
问题、评论?
如果您有任何反馈,请发送给我。我在Twitter上是@andrewkandels,或在akandels [at] gmail.com。如果您有任何改进的想法,请随时发送给我一些pull requests。如果您在使用它,请告诉我!祝您好运。
许可证
由Andrew Kandels在BSD-2许可证下发布。
依赖关系
Furnace依赖于以下优秀的库(包含在您的签出中)
- jQuery
- Modernizr
- Twitter Bootstrap
- Font Awesome
- Contain
- ContainMapper
- Zend Framework 2
Furnace 使用(但不包括在内,也不要求您安装)
- SASS/Compass
- Google 的 Closure Compiler