Atomi c операции между микросервисами - PullRequest
1 голос
/ 20 февраля 2020

Мне нужно разрешить операции atomi c в моем приложении на основе микросервиса на основе весенней загрузки. Вы можете представить 2 микросервиса, как вы можете видеть на картинке.

enter image description here

Один сервис используется для сохранения пользовательских разрешений и учетных данных в качестве провайдера идентификации, а другой - как учетная запись пользователя, используемая в приложении для сопряжения с заказами, контактами, адресами и т. д.

Когда пользователь создает новую учетную запись, мне нужно создать пользователя для деловых целей и идентификатор пользователя для авторизации. Обе операции должны выполняться как одна операция Atom c. Это означает, что если один из них потерпел неудачу, бот должен потерпеть неудачу и откат Невозможно сохранить учетные данные пользователя, но без объекта бизнес-пользователя. Можете ли вы сказать мне, как лучше это решить или как должны выглядеть шаги?

Моей первой идеей был вызов с RestTemplate of Feign одного сервиса из другого, но я понятия не имею, как откатить операцию, если второй сбой. Спасибо за совет.

1 Ответ

3 голосов
/ 21 февраля 2020

Если операция atomi c необходима из-за согласованности транзакций, эти две службы должны быть объединены в одну.

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

...