Size: a a a

2021 June 23

Б

Борис Зырянов... in symfony
А, ну тогда совсем странно
источник

D

Dmitry in symfony
и убедитесь что у вас пустой EM
источник

H

HAJIOM in symfony
Кеш отключен в запросе при вытаскивании. Ну и опять же перед логированием состояния выполняю рефреш обьекта
источник

D

Dmitry in symfony
далее
убедитесь что у вас транзакция по изменению закрывается раньше чем начинается обработка в другом процессе
источник

H

HAJIOM in symfony
Судя по логам доктрины так и есть, после вызывается селект
источник

D

Dmitry in symfony
ну тогда надо смотреть код, у вас явный race condition
источник

SB

Sergei Baikin in symfony
я бы поставил задержку для сообщения секнд 5 и не парился
благо ребит умеет из коробки
источник

D

Dmitry in symfony
особенно если все происходит только под нагрузкой, я бы смотрел в сторону транзакций и коннектов
мне кажется что транзакция по изменению не успевает коммитится иногда до того как вы начинаете обработку сообщения
источник

H

HAJIOM in symfony
Так 💯 будет работать, но эти секунды критичные) да и выглядит непонятным костылём
источник

SB

Sergei Baikin in symfony
если китичные то я бы делал in memmory очередь чтобы тут же сразу следующий обработчик вызывался
источник

D

Dmitry in symfony
кстати, у ващей сущности есть какое нибудь поле типа с наносекундами ?
пишите это значение в сущность и сохраняйте в базу
и его же добавьте в само сообщение
а потом в консьюмере проверьте значения
если не сходятся - дайте слип в 1 секунду и попробуйте передостать сообщение из базы
если начнут сходится - вот вам и проблема

это для дебага вам
источник

SB

Sergei Baikin in symfony
А вобще конечсно если есть собщение подразумеватся обычно что моментальности и кртичиночти нет и не надо
источник

H

HAJIOM in symfony
Запускается тут же, задержка небольшая (20-100мс) т к. консьюмер подписан на очередь. Фейлится на валидации состояния, так то и вырубить можно, но хотелось бы разобраться
источник

D

Dmitry in symfony
сделайте слип на провале валидации и перезапросите еще раз - получит новую сущность ?
источник

H

HAJIOM in symfony
Попробую, но 100% что будет новая
источник

H

HAJIOM in symfony
Тут вопрос скорее как гарантировать что после флаша уже новое состояние в бд и в очереди не будет проблемы
источник

D

Dmitry in symfony
если будет новая
тогда убедитесь что UnitOfWork пустой перед запросом
источник

D

Dmitry in symfony
кстати - покажите код диспатча сообщения и флаша
источник

D

Dmitry in symfony
псевдокод имею ввиду
источник

H

HAJIOM in symfony
Точно пустой, он очищается и отрабатывает только с одним сообщением
источник