Проверяем есть ли JOB в очереди с драйвером Redis
Автор:
Eugeny Nosenko
Дата публикации:
2021-08-18 15:55:55 982
Чтобы избежать двойного запуска 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; }
Данный код можно менять по Вашему усмотрению. Я привел только пример использования.
Счастливой разработки </>