0

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

有没有办法做到这一点?

它将在 debian 上运行。并且应该可以从 php 中使用。到目前为止,我发现的唯一一件事是在 Gearman 中安排一个特定日期和时间的工作,但它运行在没有广泛传播的东西上:(

4

1 回答 1

0

您的问题有两个部分:(1)未来的计划和(2)能够取消工作直到那个时候。

For (1)at应该可以正常工作,正如该问题中指定的那样,这个人甚至发布了他的包装代码。你试过了吗?

如果您不想使用它,请考虑以下场景:

  • 在数据库中为要发送的电子邮件插入一条电子邮件记录,包括一个“timeSent”列,您将在未来设置 1 分钟。
  • 让一个齿轮工(我会解释为什么是单一的)查看数据库中尚未发送的电子邮件(例如,某些status列 = 0)以及timeSent已经通过的位置,然后发送这些电子邮件。

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

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

于 2010-11-13T20:59:27.683 回答