第二次和第三次重试的Beanstalkd自定义任务延迟

时间:2015-10-27 12:49:11

标签: php queue beanstalkd

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

第一 - 毫不拖延 第二 - 一小时 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;
    }
}

1 个答案:

答案 0 :(得分:1)

很可能 - 向Beanstalkd服务器询问有关该工作的统计信息。

来自Beanstalk protocol.txt文件:

stats-job <id>\r\n

返回的数据包括作业先前被保留,释放的次数以及管名等的数量。您可以使用最适合的数据来根据需要对其进行重新排队。

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

由于您可以尝试从多个队列中获取作业,因此您只需让代码查看主队列,第二次/第三次尝试管,看看它们是什么给予,适当处理。

相关问题