Как обрабатывать параллельный запрос на командной шине? - PullRequest
0 голосов
/ 01 октября 2019

Как обрабатывать параллельный запрос на командной шине? Я прочитал несколько статей и не нашел убедительного подхода.

Один из подходов состоит в том, что все команды добавляются в очередь и затем выполняются по одной за раз. Другой подход - это своего рода «блокировка», которая препятствует одновременному выполнению двух команд, или другая позволяет одновременно выполнять несколько команд.

Как должен решаться сценарий, подобный этому:

1) первый пользователь удаляет продукт

2) второй пользователь добавляет комментарий к удаленному продукту

Как мы можем гарантировать, что если эти две команды будут запущены одновременно с тем, что комментарий не будет 'не могут быть добавлены в удаленный продукт.

1 Ответ

1 голос
/ 01 октября 2019

Как обрабатывать параллельный запрос на командной шине?

Обзор Условия гонки не существуют

Разница во времени в микросекундах не должна влиять на основные виды делового поведения.

В проекте, где вы фиксируете решения, принятые где-то еще (человек решил удалить, человек решил прокомментировать), вы должны продумать тот факт, что люди работают одновременно, и можетна самом деле принимать противоречивые решения.

Другими словами, проблема требует решения в вашей модели, а не в вашей системе.

В общем, ваше постоянное хранилище следует понимать как принуждение к победе первого автораполитика. Таким образом, для обновления хранилища могут быть запущены два параллельных процесса (или, другими словами, вам часто нужно делегировать управление параллелизмом в постоянное хранилище, а не пытаться управлять им в процессах без сохранения состояния). Идея заключается в том, что база данных изменяется гораздо реже, чем модель домена, и поэтому гораздо проще обеспечить, чтобы в каждый момент времени работала только одна копия.

Примечание. в частности или ;у вас были бы те же гоночные соображения, если бы у вас была одна модель и вы заменяли надежную копию текущего состояния.

...