代码之家  ›  专栏  ›  技术社区  ›  Thomaschaaf

与Gearman一起推迟工作队列

  •  0
  • Thomaschaaf  · 技术社区  · 14 年前

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

    有办法做到这一点吗?

    它将在debian上运行。并且应该可以从php中使用。到目前为止,我唯一发现的是 Schedule a job in Gearman for a specific date and time 但这是基于一些没有广泛传播的东西:(

    1 回复  |  直到 7 年前
        1
  •  0
  •   Fanis Hatzidakis    14 年前

    你的问题有两个部分:(1)未来的日程安排和(2)在此之前能够取消工作。

    对于(1) at 应该可以按照问题中的说明正常工作,这个家伙甚至发布了他的包装代码。你试过了吗?

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

    • 在数据库中插入要发送的电子邮件的电子邮件记录,包括“timeSent”列,您将在未来1分钟内设置该列。
    • 让一名gearman员工(我将解释为什么单身)查看数据库中尚未发送的电子邮件(例如一些电子邮件) status 列=0)和 timeSent 已经通过了,请发送这些。

    所以,对于(2),如果你想在邮件发送前取消它,只需更新它的地址 地位 列中的其他内容。

    您的gearman worker必须是一个,因为如果您有多个,他们可能会获取并尝试发送相同的电子邮件记录。如果你需要多封邮件,确保收到邮件记录的人在任何耗时的操作之前(比如,通过更新邮件记录)先将其锁定 地位 列中的其他内容)。

    推荐文章