justinyost / cakephp-queue
CakePHP 的队列插件提供了延迟任务执行,支持 SQLite 的分叉。
Requires
- php: >=5.5
- cakephp/cakephp: ^3.2
Requires (Dev)
- cakephp/migrations: ^1.0
- dereuromark/cakephp-tools: ^1.2
- fig-r/psr2r-sniffer: dev-master
Suggests
- dereuromark/cakephp-tools: For the Email lib and QueueEmailTask. Or write your own task here. Also for admin backend.
README
此分支用于与 CakePHP 3 和 SQLite 一起使用。它仅作为支持 SQLite 的分叉,真正的这个包版本应在此使用:[https://github.com/dereuromark/cakephp-queue](https://github.com/dereuromark/cakephp-queue)。
背景
这是一个非常简单且极简的 CakePHP 任务队列(或延迟任务)系统。它主要是为了演示队列的工作方式,没有任何依赖。
整体功能灵感来源于 Gearman、Beanstalk 或 dropr 等系统,但没有任何与这些更高级系统竞争的幻想。
该插件试图提供一个基本的、简单易用的方法,以启用延迟作业执行,无需设置或运行额外的队列守护程序,同时很好地集成到 CakePHP 中,并简化工作脚本的创建。
请参阅博客文章。对于更健壮和适用于生产用例,请参阅优秀列表。
为什么使用延迟执行?
当你的页面想要执行与渲染当前页面无关的任务时,延迟执行(尤其是在 PHP 中)是有意义的。例如,在一个 BBS 类型的系统中,新用户帖子可能需要创建多个个性化的电子邮件消息,通知其他用户新内容。创建和发送这些电子邮件与当前活跃的用户完全无关,并且不应增加页面响应时间。另一个例子是按用户请求下载、解压缩和/或分析外部文件。解决这些问题的常规方法会创建专门的 cronjob,这些 cronjob 使用特定的数据库状态来确定应执行哪些操作。
队列插件提供了一个简单的方法来创建和运行这类非用户交互关键任务。
虽然你可以运行多个工作进程,并且可以将这些工作进程(在一定程度上)通过共享数据库分布到不同的机器上,但你应认真考虑使用更高级的系统来处理高容量/高数量工作进程的系统。
安装和用法
见 文档。
限制
如果你想要使用多个工作进程,请每个类型只使用一个。目前否则可能会存在作业运行多次的风险!
历史
最近改进
- 使用 QueuedJobs 表代替 QueuedTasks(任务只是实现类)
- 使用 json_encode/decode 代替 serialize
- 作业的优先级
- 如果数据库支持,则在获取新作业时使用事务
- 代码改进,更严格的类型提示
还有...
非常感谢 Max (Dee-Fuse) 使 3.x 升级完整!
由 David Yell (davidyell) 修改
- 基本 CakePHP 3.x 支持
由 Mark Scherer (dereuromark) 修改
- CakePHP 2.x 支持
- 一些小的修复
- 添加了 crontasks(作为特定问题的不同方法)
- 可能的(可选)前端访问 /admin/queue 的 Tools Plugin 依赖项
- 配置键 "queue" 现在是 "Queue" ($config['Queue'][...])
由 Christian Charukiewicz 添加 (charukiewicz)
- 配置选项 'gcprop' 现在为 'gcprob'
- 修复了 README 中的错误和变量名(Propability -> Probability)
- 在 README 中添加了几行关于 createJob() 使用说明
- 在 queue.php 中添加注释解释配置选项