6

据我所知,Gearman 不支持预定作业或延迟作业。我在想也许计划的作业可以先排队,at然后在at时间段到期后添加到 Gearman 队列中。

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

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

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

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

4

3 回答 3

2

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

于 2010-09-01T12:52:05.833 回答
1

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

例如,如果您想在 2012 年 3 月 12 日星期一上午 9 点发送一封电子邮件,请向队列中添加一个名称类似于email_2012-03-12_09:00的作业。然后有一个每小时运行的 cron 作业,它运行一个注册任何匹配email_ + 当前日期和时间的作业的工作人员。

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

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

于 2011-01-25T13:33:06.200 回答
0

如果你使用 Zend...

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

https://github.com/juriansluiman/SlmQueue

于 2014-07-23T09:47:46.590 回答