#sql #spring #transactions #spring-transactions
#sql #spring #транзакции #весенние транзакции
Вопрос:
Я хочу выполнить функцию, которая блокирует таблицу / строку? , проверяет, существует ли запись (с определенными критериями) или нет, и создает запись, если она не существует.
Я хочу использовать его в своей микросервисной архитектуре для обработки одновременных запросов, пытающихся изменить одни и те же данные.
Как я могу этого добиться?
РЕДАКТИРОВАТЬ 1: подробное объяснение моей цели :-
Шаг 1: Экземпляр микросервиса 1 блокирует таблицу, выполняет процедуру / транзакцию
Шаг 2: внутри процедуры / транзакции проверьте, существует ли запись, если да, верните true и снимите блокировку, если нет, создайте запись и снимите блокировку.
Шаг 3: Во время выполнения шага 2 другой экземпляр микросервиса B пытается получить доступ к таблице (т.Е. параллельный запрос), но поскольку он заблокирован, экземпляр B будет ждать, пока экземпляр A не снимет блокировку.
шаг 4: После того, как экземпляр A снимает блокировку, экземпляр B переходит к шагу 2.
Может быть 5-7 одновременных запросов.
Комментарии:
1. Вы хотите выполнить какую-либо процедуру db после снятия блокировки или вы хотите убедиться, что некоторый java-код выполняется только один раз?
2. @Krzysztof — Я подробно добавил свое требование.. я мог получать одно и то же сообщение несколько раз .. поэтому я пытаюсь достичь идемпотентности с помощью механизма кэширования.
3. Я пытаюсь добиться этого: microservices.io/patterns/communication-style /…
Ответ №1:
Извините, если я что-то упускаю из виду в отношении цели, которую вы хотите достичь, но вместо того, чтобы пытаться использовать такой механизм распределенной блокировки, возможно, альтернативным решением будет использование какого-либо брокера сообщений, в который разные микросервисы будут публиковать сообщения, с одним потребителем, который будет обрабатывать их с учетом возможных ошибок.дубликаты. Это правда, что с определенными ограничениями, но такие сервисы, как Kafka или RabbitMQ, например, гарантируют упорядочение сообщений.
Вы можете сделать издателей этой первой очереди записи потребителями другой, в которой вышеупомянутый единственный потребитель опубликует результаты операции, выполненной против серверной части, если вашим микросервисам нужна эта обратная связь.
Я думаю, что эта настройка позволит в значительной степени разделить ваши различные службы без риска использования предложенных блокировок.