Комментарии 16
Почему отказались от использования очередей? В случае, если одна задача — один процесс, проблем бы с менеджером не было
Я к тому, что, мне кажется, эта задача решается проще, выделением блока try-catch в отдельный процесс, т.о. ошибки в одной из задач не будут влиять на другие. Что-то вроде
while (!$this->isShuttingDown()) {
$task = $this->taskProvider->getNextTask();
// fire and forget
$this->producer->runTask($task);
}
В статье преведены примеры проблемы в том числе и с try..catch, который к самой проблеме имеет весьма посредственное отношение. Суть в том, что менеджер документов это своеобразный реестр. Об этом тоже в статье есть :)
Если я правильно понял статью, то проблема в долгоживущем скрипте, который накапливает ошибки если ObjectManager — это синглтон.
Если бы скрипт обрабатывал таски по одному и умирал при исключении — этой проблемы не было. А "повреждённые" таски выглядят как классические failed или delayed messages в терминах message broker.
Проблемы использования Doctrine ODM в процессах-демонах