在Gearman中安排一个特定的date和时间的工作

从我所看到的Gearman不支持预定的工作或延迟的工作。 我在想,也许预定的工作可能会先排队,然后at时间段过期之后join到Gearman队列中。

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

这是处理这个问题的最好方法吗?你有其他的想法吗?

我selectGearman比其他队列解决scheme的原因是它有一个PHP扩展。

我正在编写的代码用于维护需要发送的电子邮件队列。 因此,我可能会指定我要在星期五9.50发送一封电子邮件到example@example.org。

我决定按照我的问题原来的路线走。 为了这个目的,我为二进制文件编写了一个PHP包装器,并在Ubuntu上进行了测试。 如果你有兴趣可以在github上找到: http : //github.com/treffynnon/PHP-at-Job-Queue-Wrapper

一个相当冒险的解决方案,只有在每小时或每天的解决方案才能正常工作,将使作业(功能)名称包含您希望它发送的日期。 然后,每天或每天都有工人以cron开始注册这些工作。

例如,如果您想在2012年3月12日星期一上午9点​​发送电子邮件,请将姓名添加到队列中,名称为email_2012-03-12_09:00 。 然后,每小时运行一个cron作业,运行一个注册与email_ +当前日期和小时相匹配的作业的工作人员。

正如我所说,可能可行,但相当哈克!

更新1:我最近看到, gearmand数据库持久性的文档现在提到了一个名为when_to_run的字段,它是一个INT ,并且可能持有一个unix时期的时间戳。 该字段似乎还没有在代码中引用。

如果你正在使用Zend …

SlmQueue是一个作业队列抽象层。 它允许您在Zend Framework 2应用程序中轻松使用作业队列系统。 因此它不会强制您专门使用一种类型的作业队列。 你可以编写你的代码和作业,独立于底层系统。 这使系统具有很大的灵活性和解耦。

https://github.com/juriansluiman/SlmQueue