推迟与Gearman的工作队列

时间:2010-11-13 10:53:54

标签: php delayed-job job-queue

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

有办法做到这一点吗?

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

1 个答案:

答案 0 :(得分:0)

您的问题分为两部分:(1)将来的日程安排和(2)能够在此之前取消作业。

对于(1)at应该按照该问题中的规定正常工作,并且该人甚至发布了他的包装代码。你试过吗?

如果您不想使用它,请考虑以下情况:

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

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

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

相关问题