春ブーツでの分散トランザクションのロールバック

Joemon :

私は春ブーツと分散トランザクションのロールバックを学んでいます。私はJPAとH2データベースと春ブート2.2を使用しています。私の例では、私は自分のH2データベースで、異なるポート上で実行されている3マイクロサービスを持っています。

MicroserviceA --- のhttp:// localhostを:2222 / savePersonBasicDetails
MicroserviceB --- のhttp:// localhostを:3333 / savePersonAddress
MicroserviceC --- のhttp:// localhostを:4444 / savePersonH​​obbies

MicroserviceAから、私は私が彼らのそれぞれのデータと一緒に、残りの2 microservicesに送信されますPERSON_IDを取得します。microservicesのいずれかが失敗した場合、私は完全なトランザクションをロールバックします。

例:

保存(PersonVO personVO){

Integer personId = microserviceA.savePersonBasicDetails(personVO);

microserviceB.savePersonAddress(personId, personVO);

microserviceC.savePersonHobbies(personId, personVO);//If it fails in microserviceC,     

                                              //then the complete transaction should be rolled back.

}

私はsave()メソッドに@Transactional(rollbackFor = Exception.class)で試してみましたが、トランザクションはロールバックされていません。

してください提案。

Alexandarペトロフ:

あなたは、用語を混合しています。分散トランザクションは、RDBMSではなく、Webサービスに関連した用語です。石鹸のWebサービスに関連するWebサービスのWS-TRANSACTIONオーバー取引のためのWebサービス標準があります。しかし、この規格は、主に未使用です。

Webサービスのコンテキストで使用usualyサームは、取引報酬であり、あなたはそれを検索することができます。補償のための非常に一般的なパターンは、試しキャンセル確認パターンで異なるaproachesもあります。

あなたは、分散トランザクションを使用して主張する場合、このリンクをチェックアウト:https://www.atomikos.com/Blog/TransactionalRESTMicroservicesWithAtomikos

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=373325&siteId=1