MuleSoft: управление транзакциями XA для двух разных вызовов REST - PullRequest
0 голосов
/ 02 октября 2018

У нас есть ситуация, когда нам нужно управлять транзакцией в БД через несколько вызовов API остальных.

В традиционном примере, когда новый клиент зарегистрирован, заказан, и оплата производится с помощью различных микроуслуг.

У нас есть список сервисов DB Micro REST и комбинация сервисов SOAP и REST, которые будут использоваться для реализации бизнес-правил.

Вопрос: как я могу добавить обертку для управления транзакциями вокруг нее, чтобы она выполняла откатданные из базы данных, когда только один сбой получился.

Я готов вести блоги о транзакциях XA, но не могу получить их, как использовать в моем основном проекте, откуда я звоню 1. 5 БД Micro Services 2. 1 Внешний SOAPСервис 3. 2 Служба внешнего REST.

Может ли кто-нибудь мне помочь?

Заранее спасибо

1 Ответ

0 голосов
/ 18 октября 2018

Веб-технологии, такие как SOAP en REST, не подходят для участия в транзакциях (XA).Они созданы для связи между независимыми системами, которые потенциально могут быть расположены на другом конце света.Хотя технически возможно сделать это с помощью SOAP (см. WS-Transaction на google), я настоятельно рекомендую это сделать, потому что

  1. Очень трудно и склонно к ошибкам заставить его работать правильно.
  2. Производительность действительно плохая.
  3. Вы действительно доверяете внешней службе, чтобы начать транзакцию в вашей?У вас нет абсолютно никакого контроля над тем, как долго транзакция будет оставаться активной, что приведет к блокировкам в вашей базе данных, которые могут быстро перерасти в блокировки таблиц, в результате чего весь ваш сервис будет недоступен.

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

...