SQS FIFO QUEUE - sqslistener в кластерном приложении Springboot
У меня есть кластерное приложение springboot, обрабатывающее сообщения из очереди sqs fifo. Очередь fifo интегрирована в springboot с использованием аннотации spring @sqslistener. У меня в очереди много записей о сотрудниках. когда одновременно поступают две записи, относящиеся к одному и тому же сотруднику, и если они попадают на разные узлы кластера, обработка на втором узле перезаписывает записи до завершения фиксации первого узла. какие-либо мысли о том, как предотвратить такое поведение на стороне приложения или на стороне очереди? Синхронизация включена на каждом узле, но она не гарантирует синхронизацию на уровне кластера.
«перезапись записей»: представьте, что в БД есть одна запись на каждого сотрудника. Сообщение SQS предназначено для обновления адреса сотрудника. Одно сообщение предназначено для обновления адреса до A, а второе - для обновления его до B. Когда обе записи попадают в два разных узла одновременно, обновление узла 1 исчезает в БД. Похоже, что node1 никогда не обновлял записи. В то же время узел 2 обработал второе сообщение и обновил значение в БД.
Проблема может быть решена, если есть способ принудительно (на уровне очереди) отправлять следующий пакет сообщений только после обработки и удаления предыдущих.
Есть ли простой способ справиться с этим на уровне очереди SQS fifo вместо того, чтобы проходить сложные настройки параллелизма на уровне БД?