例如:当我要更新产品时,我为此创建作业并将作业放入队列。作业在那里等待,但仍未处理,与此同时,我需要创建新作业来更新同一产品,但使用不同的数据,现在我想从队列中删除旧的更新作业,并将新的作业推入队列,有什么想法吗? / p>
答案 0 :(得分:0)
我有个主意。 在每个作业调度上,您都将设置一个缓存键,该uuid也会在作业的属性上设置。
$uuid = uuid();
Redis::set("update-product-token-$ID",$uuid);
$data['uuid'] = $uuid;
ProductUpdateJob::dispatch($data);
在handle函数的第一行,检查redis令牌是否与作业的令牌匹配。如果没有,工作就会正常退出
$uuid = Redis::get("update-product-token-$ID",NULL);
if($uuid !== NULL && $uuid !== $this->uuid) return;
//proceed with update here
不查询队列,不猜测,不暂停执行中的更新。优雅的东西。让我知道你的想法。