Если вы не хотите зависеть от Microservice B, то я бы просто разрешил изменение имени изначально и рассматривал отказы от Microservice B как исключение возможной согласованности.
Итак, в Microservice A вы делаете какнасколько это возможно, чтобы убедиться, что изменение не вызовет проблем с синхронизацией MS-B.Затем вы записываете событие «имя пользователя изменено».
Если MS-B не работает, значит, все готово, имя изменилось.
Если MS-B равно работает, и возникает проблема, когда он пытается синхронизировать обновленное имя пользователя, а затем вы переходите в режим исправления.Что именно это означает, будет зависеть от ряда факторов (вероятность возникновения проблемы, ее последствия и т. Д.).
Возможно, MS-B приостановит работу и отправит электронное письмо, чтобы человек мог исправить ситуацию.
Или MS-B может выполнить обратное изменение (другое «имя пользователя изменено» или «изменение имени возвращено на: X» - все, что имеет смысл для вашего домена).
Если вы выдаетедля компенсации событий у вас будут некоторые дополнительные исключения, за которыми нужно следить ... например, если User A
меняет свое имя на User X
, а User B
затем меняет их на User A
.Если MS-B отменяет изменение первого имени, вы получите дубликаты имен, если только вы не отмените изменение второго имени.
(Или, может быть, вы могли бы «заблокировать» старое имя пользователя на некоторое время, прежде чем оно будет разрешеноиспользовать повторно.)