Вот сценарий: я использую очередь Beanstalkd для отправки электронного письма в огромный список электронных писем (50000+), каждое электронное письмо должно иметь уникальный контент, поэтому запущенное задание перебирает все адреса, генерирует контент и отправляет почта.
Иногда пользователь может захотеть отменить операцию в середине отправки, например, во время выполнения задания и после того, как почта была отправлена, скажем, на 20000 адресов, пользователь нажимает «Стоп», что должно «удалить» задание.
что я сделал до сих пор, так это то, что мне удалось получить запущенный экземпляр задания, Queue::Push возвращает идентификатор задания, поэтому я сохраняю этот идентификатор, сохраненный в БД, и когда я хочу остановить задание, это то, что я пытался сделать
$phean= Queue::getPheanstalk();
$res = $phean->peek($Job_ID); // returns a Pheanstalk_Job
$job = new \Illuminate\Queue\Jobs\BeanstalkdJob(app() , $phean, $res , 'default') ;
$res = $job->delete() // returns NOT_FOUND ??
$data = $job->getRawBody() // returns correct data, so I'm sure this is the right job instance
так почему я получаю NOT_FOUND, хотя когда я использую supervisorctl tail -f имя очереди, я вижу, что задание все еще выполняется и выводит содержимое
Любая помощь ? Если есть лучший подход, чем пытаться получить задание и удалить его таким образом, я открыт для предложений, я подумал о сохранении идентификатора задания в базе данных (идентификатор, статус), и когда я хочу удалить его, я изменяю идентификатор статус, и в цикле, который выполняется внутри задания, он проверяет каждый раз, или, может быть, каждые 10 раз, и если статус равен, например, 1, то $job->delete(), но это будет так медленно, как это попадет в БД в каждом цикле.