Тема не требует пояснений, но мне определенно нужен свежий взгляд на это.
Я использую пакет mmoreram/GearmanBundle
Symfony2
для отправки заданий на выполнение. Итак, мне удалось отправить задание, выполнить его и вернуть результаты. Эта часть работает, как и ожидалось.
Тем не менее, я пытаюсь сделать то же самое с фоновой работой/задачами. Я знаю, что в этом сценарии клиент не ждет завершения задания, но я надеялся, что дескриптор задания поможет мне в этом (например, получить статус задания).
$gearman = $this->get('gearman');
$jobId = $gearman->doHighBackgroundJob("CsvWorker~parseCsv", json_encode(["foo", "bar", "123"]));
sleep(3);
// At this point, job has completed for sure (it's very simple)
var_dump($jobId);
var_dump($gearman->getJobStatus($jobId));
Это выводит следующее:
string 'H:localhost.localdomain:10' (length=26)
object(Mmoreram\GearmanBundle\Module\JobStatus)[410]
private 'known' => boolean false
private 'running' => boolean false
private 'completed' => int 0
private 'completionTotal' => int 0
В частности, known => false
меня действительно озадачивает. Во время выполнения задания я убедился, что правильно вызываю методы sendStatus
и sendComplete
.
Таким образом, я думаю, общий вопрос будет таким: после того, как работа будет завершена, будет ли она известна Gearman
?
ОБНОВЛЕНИЕ:
Мне удалось добавить в пакет некоторые изменения кода, которые позволили мне прослушивать данные, возвращаемые заданием. Таким образом, я могу сохранить это в базе данных, однако мой клиент (создатель задания) все еще в значительной степени остается в неведении относительно того, действительно ли задание завершено.