Реализация всего этого самостоятельно с помощью некоторого транзакционного контекста, отслеживаемого на бизнес-уровне, всегда является вариантом. Вы можете использовать некоторые механизмы компенсации, чтобы при необходимости откатывать транзакции, но вам необходимо:
- где-то сохраняется информация о транзакциях
- использовать идентификаторы корреляции транзакций, чтобы вы могли запрашивать, когда ответ
был потерян (в любом случае иметь корреляционные идентификаторы - хорошая идея)
- реализует операции, необходимые для чтения / записи / отката и т. Д., Так что это может сделать ваши службы немного более сложными
Другой вариант, о котором я могу подумать: если вы используете SOAP
, вы можете перейти к асинхронной связи и найти какой-нибудь стек, реализующий спецификации WS-Coordination, WS-AtomicTransaction и WS-BusinessActivity , тогда решить для себя, если это хорошая идея в вашем контексте или нет. Например, я думаю, Axis2 поддерживает эти , но, конечно, в конечном итоге это зависит от используемых вами технологий и стека.
Из статьи выше:
WS-AtomicTransaction определяет тип координации, который наиболее полезен
для обработки сгенерированных системой исключений, таких как неполная запись
операция или процесс ненормально завершается.
Ниже приведены типы двухфазного коммита, которые он реализует.
Надеюсь, это поможет!