Веб-сервис и транзакционные гарантии - PullRequest
1 голос
/ 27 марта 2019

Как вы интегрируете приложения через веб-сервисы и имеете дело с техническими ошибками, такими как ошибки подключения для вызовов веб-сервисов, которые меняют состояние?

Например, когда сетевое соединение прерывается во время вызова веб-сервиса, как работает клиентзнать, обработал ли веб-сервис свои действия или нет?

Может ли эта проблема быть решена только на бизнес-уровне (например, для запроса предыдущего состояния вызова), или вам известны некоторые полезные рамки / лучшие практики, которые могут помочь в обеспечении гарантий транзакций вокруг веб-службы?

1 Ответ

1 голос
/ 28 марта 2019

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

  • где-то сохраняется информация о транзакциях
  • использовать идентификаторы корреляции транзакций, чтобы вы могли запрашивать, когда ответ был потерян (в любом случае иметь корреляционные идентификаторы - хорошая идея)
  • реализует операции, необходимые для чтения / записи / отката и т. Д., Так что это может сделать ваши службы немного более сложными

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

Из статьи выше:

WS-AtomicTransaction определяет тип координации, который наиболее полезен для обработки сгенерированных системой исключений, таких как неполная запись операция или процесс ненормально завершается.

Ниже приведены типы двухфазного коммита, которые он реализует.

2PC types supported by WS-AtomicTransaction

Надеюсь, это поможет!

...