У меня есть JMS-очередь с несколькими потребителями на нескольких кластерных узлах.Я получаю сообщения от разных отправителей.Может быть несколько сообщений с информацией только для одного объекта.Сущности должны быть сохранены с помощью jpa.Когда сообщение для объекта получено, объект может или не может уже существовать в базе данных.
Проблема возникает, когда 2 потребителя обрабатывают сообщение для одного и того же объекта одновременно.Оба потребителя пытаются найти объект в базе данных.Поскольку объект не найден, оба пытаются вставить объект вместо обновления существующего.Таким образом, чем быстрее один выигрывает, а другой заканчивается исключением (из-за ограничения уникального ключа в таблице).
Я подумал о неприятном решении, сделав несколько попыток / поймать флеш-вызов.Но я использую транзакции, управляемые контейнером, и все еще существует разрыв между сбросом и окончанием транзакции.
Вторая мысль была о разнице между слиянием и сохранением.Но даже если это может работать с слиянием, это приведет к перезаписи существующих данных.
Я думаю, что это должно быть очень распространенной проблемой, но я до сих пор не смог найти чистого решения.Может быть, я думаю в неправильном направлении.
Любая помощь приветствуется.