Php 第二次和第三次重试的Beanstalkd自定义任务延迟
我使用Beanstalkd(带-)进行队列。但我需要为下次重试设置自定义延迟 第一-毫不拖延 2号-一小时后 第3次-24小时内 可以用Beanstalkd实现吗Php 第二次和第三次重试的Beanstalkd自定义任务延迟,php,queue,beanstalkd,Php,Queue,Beanstalkd,我使用Beanstalkd(带-)进行队列。但我需要为下次重试设置自定义延迟 第一-毫不拖延 2号-一小时后 第3次-24小时内 可以用Beanstalkd实现吗 public function actionCron($job) { $sentData = $job->getData(); try { // I need to setup custom delay there // 1 hour after 1st retry
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文件:
stats作业\r\n
返回的数据包括先前保留、释放作业的次数,以及管名称等。您可以根据需要使用最合适的数据对其重新排队
由于您无法更改数据以延迟它,因此只能创建一个新作业,一个选项是将其放入新队列中进行第二次或第三次尝试,并具有适当的初始延迟,然后如果作业来自重试队列(在第一次或第二次尝试之后),请在再次运行之前更改初始延迟
由于您可以尝试从多个队列获取作业,因此您只需让代码监视主队列,以及第二次/第三次尝试管道,并查看它们给出了什么,并根据需要进行处理
stats-job <id>\r\n