Тоже была примерно такая же нужда. Однако, как я понял, из 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;
}
}