dereuromark/cakephp-queue

CakePHP的队列插件提供延迟任务执行功能。

安装次数: 618,331

依赖关系: 13

建议者: 1

安全: 0

星级: 307

关注者: 22

分支: 136

开放问题: 2

类型:cakephp-plugin

8.1.1 2024-07-18 12:42 UTC

README

CI Coverage Status Latest Stable Version Minimum PHP Version PHPStan License Total Downloads Coding Standards

这个分支用于与 CakePHP 5.0+ 一起使用。有关详细信息,请参阅 版本映射

背景

这是一个为 CakePHP 设计的非常简单和极简的作业队列(或延迟任务)系统。如果您需要一个非常基本的 PHP 内部队列工具,这绝对是一个选择。它也是一个很好的演示工具,用于展示队列的工作原理,并且没有任何依赖关系。

整体功能受到 Gearman、Beanstalk 或 dropr 等系统的启发,但没有任何与这些更高级系统竞争的错觉。

该插件尝试提供一个基本、易于使用的方法来启用延迟作业执行,无需设置或运行额外的队列守护进程,同时很好地集成到 CakePHP 中,并简化了工作脚本的创建。您还可以轻松地将进度和状态信息添加到您的页面中。

请阅读我的关于 延迟执行实际应用案例 [新] 的博客文章。对于更多高容量和复杂的用例,请参阅 优秀列表 的替代方案。

为什么使用延迟执行?

延迟执行在页面想要执行与渲染当前页面不直接相关的任务时很有意义(尤其是在 PHP 中)。例如,在一个 BBS 类型的系统中,新用户的帖子可能需要创建多个个性化的电子邮件消息,通知其他用户新内容。创建和发送这些电子邮件与当前活动的用户无关,不应增加页面响应时间。另一个例子是按用户请求下载、提取和/或分析外部文件。解决这些问题的常规方法是创建专门的 cronjob,这些 cronjob 使用特定的数据库状态来确定应该执行哪些操作。

队列插件提供了一种简单的方法来创建和运行这类非用户交互关键的任务。

另一个重要原因是,如果任务失败,可以(自动)重试特定作业。因此,如果电子邮件服务器第一次没有工作,或者 API 网关有问题,当前要执行的作业不会丢失,而是保留以重新运行。大多数这些外部服务都应被视为每 x 次调用一次失败,因此队列实现可以帮助减少由于此类失败引起的问题。如果即使重试后作业仍然无法完成,您仍然可以选择调试其有效负载和为什么该作业无法完成。这里没有数据丢失。

虽然您可以运行多个工作进程,并且可以将这些工作进程(在一定程度上)通过共享数据库分发到不同的机器,但对于高容量/大量工作进程的系统,您应考虑使用更高级的系统。

演示

请参阅 沙盒应用

安装和使用

请参阅 文档

基于 cronjob 的后台调度

如果您正在寻找安排某些后台任务:此插件与QueueScheduler 插件配合工作得非常完美。