Проверяем есть ли JOB в очереди с драйвером Redis

Автор: Eugeny Nosenko
Дата публикации: 2021-08-18 15:55:55   982


Проверяем есть ли JOB в очереди с драйвером Redis

Чтобы избежать двойного запуска 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;
}


Данный код можно менять по Вашему усмотрению. Я привел только пример использования.

Счастливой разработки </>


Оставить комментарий:
Имя:
Комментарий: