据我所知,Gearman 不支持预定作业或延迟作业。我在想也许预定的工作可以排队 at 首先,然后添加到 Gearman 队列中 at 期限已过。

at 任务是持久的,因为它们作为文件写入服务器的假脱机目录中的目录。因此,唯一的瓶颈可能是一个将任务添加到 Gearman 队列的简单脚本,因为 at 不能跨服务器分布。将其传递给 Gearman 来处理实际工作意味着我可以获得正确的工作日志记录等。

这是解决这个问题的最佳方法吗?您有其他想法吗?

我选择 Gearman 而不是其他队列解决方案的原因是它有 PHP 扩展。

我正在编写的代码用于维护需要发送的电子邮件队列。因此,我可以指定我要在周五 9.50 向 example@example.org 发送电子邮件。

有帮助吗?

解决方案

我决定去 at 我的问题最初规定的路线。出于目的,我为 at 二进制并在Ubuntu上进行了测试。如果您有兴趣,可以在GitHub上找到: http://github.com/treffynnon/php-at-ab-queue-wrapper

其他提示

一个相当老套的解决方案,只有在每小时或每天的分辨率下才能很好地工作,那就是让作业(函数)名称包含您希望发送的日期。然后让工作人员每小时或每天在 cron 中开始注册这些工作。

例如,如果您想在 2012 年 3 月 12 日星期一上午 9 点发送电子邮件,请将作业添加到队列中,其名称如下 电子邮件_2012-03-12_09:00. 。然后每小时运行一个 cron 作业,该作业运行一个工人来注册任何匹配的作业 电子邮件_ + 当前日期和时间。

正如我所说,可能可行,但相当老套!

更新1: 我最近看到文档 gearmand数据库持久化 现在提到一个名为 何时运行 这是一个 INT, ,并且可能保存一个 UNIX 纪元时间戳。代码中似乎还没有引用该字段。

如果您正在使用Zend ...

Slmqueue是一个作业队列抽象层。它使您可以轻松地在Zend Framework 2应用程序中使用作业队列系统。因此,它不会强制您专门使用一种类型的作业队列。您可以独立于基础系统编写代码和作业。这可以极大的灵活性和脱钩系统。

https://github.com/juriansluiman/slmqueue

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top