akandels/furnace

Zend Framework 2模块,用于管理具有依赖关系的优先队列中的工作,状态报告和跟踪。

dev-master 2014-08-14 15:46 UTC

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等)之上,以安排和监视这些工作,提供更多信息。

Jobs List Viewing Jobs Dependency Management Job History

安装

要安装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