Типо такого после обработки каждого месседжа
$em = $this->managerRegistry->getManager(); if (!$em instanceof EntityManagerInterface) { return; } if (false === $em->isOpen()) { $this->managerRegistry->resetManager(); return; } $this->managerRegistry->getManager()->clear();Читать полностью…
Про шард тоже слышал, а вот с консюмером проблема, не могу сделать 1 консюмер, потому что сообщения обарабываются не сильно уж и быстро и запущено 50 консюмеров щас =)
Читать полностью…Опять же можно сделать паралельные очередя- Шардировать операции, или же сделать просто 1 консюмера
Читать полностью…Ну и делать меньше сущности, а то может сделал на 50 колонок юзера с балнсом профилем и каким нить счетчиками а потом удивляться дедлокам
Читать полностью…Ну с учетом того, что дедлок это 500, то оно уйдет само на ретрай даже без отлавливания, если только хочешь что то сделать дополнительно
Читать полностью…В случае с дедлоками - да, скорее как временный костыль, чтобы чисто пожар потушить
Читать полностью…Т.е. чтобы все операции с одним юезром были только в одной очереди и с 1 консюмером, тогда не будет паралельных операций а только последовательные
Читать полностью…Тут опять же большой вопрос по предметной области - можешь ли ты нарушать очередность, что он уйдет в конец
Читать полностью…Т.е., мне в воркерах и очередях можно просто дедлок исключение отлавливать но ничего не делать, чтоб повторная попытка была ?
Читать полностью…Как вариант - запустить функцию заного с теми же входными аргументами, предварительно очистив и перезапустив em. Опять же, если это воркер мессенджера он сам уйдет на ретрай
Читать полностью…Если ты поймал EM closed - то тогда реконнектить и все восстанавливать, чтобы EM снова был жив. Когда-то делал подобное, но деталей уже не помню.
Читать полностью…Энтити менеджер по идее закроется и на попытку повторно сделать flush ты получишь Entity Manager is closed
Читать полностью…