Приветствую!
Есть цепочка задач которая:
1) отправляет запрос на создание загрузки
2) проверяет статус этой загрузки
3) если загрузка завершена, отправляет запрос на кодирование
4) если кодирование завершено, обновляет запись в бд
Проблема в том, что 2 задача завершается сразу, то есть файл еще не догружен, а уже срабатывает 3я
В обычных джобах если вызвать любой Exception, задача пробует выполниться еще раз и следующая в цепочке не срабатывает, в bus::batch почему то так не работает
Подскажите пожалуйста, как мне дождаться выполнения второй асинхронной задачи, перед стартом третьей?
$batch = Bus::batch([])->dispatch();
foreach ($video_files as $video_file) {
$file_chain = [
new FileDownloadTask($video_file->id),
new FileDownloadStatus($video_file->id),
new TranscoderTask($video_file->id),
new TranscoderStatus($video_file->id),
];
$batch->add($file_chain);
}
class FileDownloadStatus implements ShouldQueue
{
use Batchable, Dispatchable, InteractsWithQueue, Queueable, SerializesModels;
public $backoff = 10;
public function handle() {
...
if ($response->status == "completed") {
...
} else {
throw new \Exception('Download not ready');
}
}
public function retryUntil()
{
return now()->addHours(5);
}
}