Проверяем есть ли JOB в очереди с драйвером Redis
Автор:
Eugeny Nosenko
Дата публикации:
2021-08-18 15:55:55 1554
Чтобы избежать двойного запуска Job в очереди (queue) я использую простой метод. Метод написан для использования с драйвером Redis.
В job нужно добавить тэги. Четвертый элемент массива в данном примере уникальный идентификатор, С помощью него будем проверять очередь на уникальность.
/**
* Get tags
* @return array
*/
public function tags(): array
{
return [
'TEST',
'JOB',
$this->model->name,
$this->model->id
];
}
Теперь сам метод проверки
/**
* Check is job in queue
* @param int $modelId
* @return bool
*/
protected function isJobInQueue(int $modelId = 0):bool
{
$numJobs = Redis::connection()->zcount('queues:default:reserved','-inf', '+inf');
$jobs = Redis::connection()->zrange('queues:default:reserved', 0, $numJobs);
$result = false;
foreach ($jobs as $job) {
$data = json_decode($job);
if($data->displayName === 'App\Jobs\Model') {
$id = (isset($data->tags[3])) ? $data->tags[3] : 0;
if ($id === $modelId) $result = true;
}
}
return $result;
}
Данный код можно менять по Вашему усмотрению. Я привел только пример использования.
Счастливой разработки </>