2010-11-13 67 views
0

我想将一些耗时的东西抽取到队列中。为此,我发现Gearman是最常用的,但不知道它对我来说是否正确。 我们想要做的任务之一是队列发送电子邮件,并希望提供能够取消发送邮件1分钟的功能。所以它不应该马上工作,而是现在+ 1分钟执行它。这样我可以在此之前取消这项工作,并且它永远不会被发送。用Gearman推迟作业队列

有没有办法做到这一点?

它会在debian上运行。并应该可以从PHP使用。到目前为止,我发现的唯一的东西是Schedule a job in Gearman for a specific date and time,但运行的东西不广泛:(

回答

0

有两个部分给你的问题:(1)在将来进行调度和(2)能够取消该作业,直到在这个问题中指定的家伙甚至张贴了他的包装代码的时间。

对于(1)at应该只是罚款。你试过了吗?

如果你不想使用,可以考虑这场景:

  • insert an emai l在数据库中记录要发送的电子邮件,包括将在未来1分钟设置的“timeSent”列。
  • 有一个单独的gearman worker(我将解释为什么单个人)查看数据库中未发送的邮件(例如status column = 0)以及timeSent已经通过并发送这些邮件。

因此,对于(2),如果您想在发送之前取消电子邮件,只需将其列更新为其他内容即可。

你的齿轮工人必须是一个人,因为如果你有多个他们可能会获取并尝试发送相同的电子邮件记录。如果您需要多次确保获取电子邮件记录的人员在进行耗时的操作(如实际通过电子邮件发送)(比如将status列更新为其他内容)之前立即将其锁定,请立即将其锁定。