Задать вопрос
@Synacs-U
Html, CSS, Js, Jquery, PHP, Mysql

Как задать уникальное поле для очереди в laravel?

Добрый день. Необходимо задать уникальное поле в jobs (например user_id), что бы при необходимости можно было удалить из очереди именно эту задачу. (Использовать промежуточное redis, mysql не вариант).
Как этого добиться?
И как при dispatch() добавить в это поле информацию?
  • Вопрос задан
  • 198 просмотров
Подписаться 1 Простой Комментировать
Пригласить эксперта
Ответы на вопрос 2
@vism
Зачем удалять?
Пропишите в самом Job условие, чтоб сперва происходила проверка, выполнять этот Job или нет
Ответ написан
@RacceGatel
Тоже была примерно такая же нужда. Однако, как я понял, из jobs вытащить конкретный ворк и удалить "по-человечески" нельзя. Я решил эту проблему путем добавления Lock'ов с динамичным ключом, а уже в самом теле job'а проверял состояние lock'a.
Иными словами, при добавлении job'а в очередь, добавляется lock привязанный конкретно к этому job'у, в случае если очередь до нашего job'а не дошла, можно просто убрать lock и тогда этот job явно не сработает.
Такой расклад позволил мне, грубо говоря, контролировать состояние job'a пока до него не дошла очередь в воркере.

Но видимо вам такой вариант не подходит, так что буду ждать, кто предложит что-нибудь получше.

Вопрос с уникальным полем - как задать
class Job implements ShouldQueue, ShouldBeUnique
{
protected $user_id;

public function __construct($user_id)
    {
        $this->user_id = $user_id;
    }

public function handle()
    {
        //
    }

public function uniqueId()
    {
        return $this->user_id;
    }
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы