0
我解析一些HTML页面和API端点,例如,每5分钟跟踪更改。为此,我创建了ParseJob,用于解析并保存对数据库的更改。 ParseJob实现了接口ShouldQueue,并且我已经将队列驱动程序更改为Redis。为了定期运行ParseJob,我已经创建ParseCommand并把它添加到时间表:Laravel Jobs过期
class ParseCommand extends Command
{
protected $signature = 'application:my-parse-command';
public function handle()
{
$this->dispatch(new ParseJob());
}
}
class Kernel extends ConsoleKernel
{
protected $commands = [
Commands\ParseCommand::class
];
protected function schedule(Schedule $schedule)
{
$schedule->command('application:my-parse-command')
->everyFiveMinutes();
}
}
和队列工人开始作为一个守护进程来处理队列。所以,每5分钟ParseJob被推送到队列中,队列工作人员正在处理作业。
有时队列工作进程崩溃,死机或其他原因不起作用。但是,每5分钟一次的工作都会被推入队列中。在停机一小时后,我在队列中有12个工作,但那段时间无关紧要,因为我不需要在某个时间解析12次,我只需要一个解析工作。
所以我想为Redis中的expire命令起作用的作业设置TTL。怎么做?或者,也许你有另一种解决方案?