У меня запущено два экземпляра одного и того же микросервиса. Эти микросервисы ссылаются на коллекцию mongodb с помощью библиотеки reactivemon go. Эта коллекция mongodb имитирует очередь. Таким образом, каждый микросервис выбирает последний элемент в очереди, а затем обрабатывает его (не может изменить этот дизайн, поскольку это то, что придумала компания, и они не хотят менять).
Я обеспокоен тем, что два экземпляра выбирают (ie чтение) одного и того же элемента в очереди, а затем начинают обработку на нем. Они сказали, что этого не может произойти из-за свойств атомарности mongodb. Но для меня операции atomi c означают, что работа с базой данных либо произойдет полностью, либо не произойдет вовсе. Итак, как это поможет в описываемом мной сценарии? Я не думаю, что это так.
Они также сказали, что каждый экземпляр, когда он пытается прочитать документ для обработки, если он его находит, он затем обновляет статус с Todo до In-Progress. Они сказали, что это означает, что если появится другой экземпляр, он не получит тот же документ, так как статуса больше нет в Todo.
Похоже, они говорят, что во время этой c операции atomi по обновлению статуса документа с ToDo до In-Progress ни один другой экземпляр не может прочитать ту же строку, даже если обновление не произошло пока что из-за атомарности. Так работает mongodb?