【问题标题】:Beanstalkd custom task delay for 2nd and 3rd retry第二次和第三次重试的 Beanstalkd 自定义任务延迟
【发布时间】:2015-10-27 12:49:11
【问题描述】:

我使用 Beanstalkd(带有 - https://github.com/udokmeci/yii2-beanstalk)作为队列。但我需要为下次重试设置自定义延迟,

第一 - 没有延迟 第 2 - 一个小时内 第 3 - 24 小时内

是否可以用 Beanstalkd 来实现?

public function actionCron($job)
{
    $sentData = $job->getData();
    try {

        // I need to setup custom delay there
        // 1 hour after 1st retry
        // 24 hrs after 2nd retry

        return self::DELAY;

    } catch (\Exception $e) {
        //If there is anything to do.
        fwrite(STDERR, Console::ansiFormat($e . "\n", [Console::FG_RED]));

        // you can also bury jobs to examine later
        return self::BURY;
    }
}

【问题讨论】:

    标签: php queue beanstalkd


    【解决方案1】:

    这很有可能——通过向 Beanstalkd 服务器询问有关作业的统计信息。

    来自 Beanstalk protocol.txt 文件:

    stats-job <id>\r\n
    

    返回的数据包括作业先前被保留、释放的次数,以及来自哪个管名等。您可以根据需要使用最合适的任何数据重新排队。

    由于您无法更改数据以延迟它,只能创建一个新作业,一个选项是将其放入新队列中进行第二次或第三次尝试,并具有适当的初始延迟,然后如果作业已经到来从重试队列(在第一次或第二次尝试之后),在再次运行之前更改初始延迟。

    由于您可以尝试从多个队列中获取作业,因此您只需让代码监视主队列, 2nd/3rd-attempt 管并查看它们得到了什么,酌情处理。

    【讨论】:

      猜你喜欢
      • 2020-09-11
      • 2011-09-16
      • 1970-01-01
      • 2017-07-03
      • 1970-01-01
      • 2019-12-15
      • 1970-01-01
      • 2017-10-24
      • 1970-01-01
      相关资源
      最近更新 更多