Реализация всего этого самостоятельно с помощью некоторого транзакционного контекста, отслеживаемого на бизнес-уровне, всегда является вариантом. Вы можете использовать некоторые механизмы компенсации, чтобы при необходимости откатывать транзакции, но вам необходимо:
- где-то сохраняется информация о транзакциях
- использовать идентификаторы корреляции транзакций, чтобы вы могли запрашивать, когда ответ
был потерян (в любом случае иметь корреляционные идентификаторы - хорошая идея)
- реализует операции, необходимые для чтения / записи / отката и т. Д., Так что это может сделать ваши службы немного более сложными
Другой вариант, о котором я могу подумать: если вы используете SOAP
, вы можете перейти к асинхронной связи и найти какой-нибудь стек, реализующий спецификации WS-Coordination, WS-AtomicTransaction и WS-BusinessActivity , тогда решить для себя, если это хорошая идея в вашем контексте или нет. Например, я думаю, Axis2 поддерживает эти , но, конечно, в конечном итоге это зависит от используемых вами технологий и стека.
Из статьи выше:
WS-AtomicTransaction определяет тип координации, который наиболее полезен
для обработки сгенерированных системой исключений, таких как неполная запись
операция или процесс ненормально завершается.
Ниже приведены типы двухфазного коммита, которые он реализует.
![2PC types supported by WS-AtomicTransaction](https://i.stack.imgur.com/RRVHU.png)
Надеюсь, это поможет!