【问题标题】:Postpone Job Queue with Gearman使用 Gearman 推迟作业队列
【发布时间】:2010-11-13 10:53:53
【问题描述】:

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

有没有办法做到这一点?

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

【问题讨论】:

    标签: php delayed-job job-queue


    【解决方案1】:

    您的问题分为两部分:(1) 未来的计划和 (2) 能够在那个时间之前取消作业。

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-27
      • 2017-12-02
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-27
      相关资源
      最近更新 更多