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

Beanstalkd custom task delay for 2nd and 3rd retry

我将 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;
    }
}

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

来自 Beanstalk protocol.txt 文件:

stats-job <id>\r\n

返回的数据包括job之前被保留、释放的次数,来自哪个tube-name等。您可以根据需要使用最合适的数据重新排队。

因为你不能改变数据来延迟它,只能创建一个新的作业,一个选项是将它放入一个新的队列中进行第二次或第三次尝试,并有适当的初始延迟,然后如果作业来自重试队列(在第一次或第二次尝试之后),在它再次 运行 之前更改初始延迟。

由于您可以尝试从多个队列中获取作业,因此您只需让代码观察主队列, 第二次/第三次尝试管并查看他们得到什么,酌情处理。