шифте, база postgres. На консюмер смежники шлют дубли, из-за которых возникают дедлоки после обработки сообщения от кафки и обновление записи в табличке.
Отлавливаю HibernateDeadlockException + добавил в noRollbackFor(), но всё равно в логах возникают ошибки по неудачному обновлению пачек (хотя явно в запросе пачек нет, кажется что данных много и поэтому хибер использует пачки).
Какие есть варианты решения дедлоков? Может мой вариант неверный?
Нужно при получении дубля и срабатывания дедлока, выходить из метода чтобы сообщение от кафки коммитилось.
Есть ключ идемпотентности? Какой-то атрибут, чтобы по нему понимать - дубль или нет. Чтобы селектить по нему, и если запись уже была - скипать. Консьюмер идемпотентным должен быть. По локам, еще вариант оптимистик лока можно рассмотреть и кидать неудачные сообщения в dlt - dead letter topic.
Обсуждают сегодня