J'ai une application api Azure (AzureApi1) qui comporte une action dans laquelle plusieurs requêtes http sont effectuées. L'opération insère des données dans plusieurs tables dans un Azure Sql Db.Dans une transaction distribuée Azure, quelle est la meilleure approche pour annuler l'opération complète en cas d'échec d'un appel http?
Il effectue ensuite un appel API externe (ExApi) à partir du même code. En utilisant les résultats de l'appel externe, il insère/met à jour d'autres tables. Ce n'est pas dans Azure.
Ensuite, il appelle une autre API (AzureApi2) qui se trouve dans le même groupe de ressources que le premier et qui insère des données dans un autre DQ Azure Sql qui se trouve également dans le même groupe de ressources.
J'ai utilisé TransactionScope dans AzureApi1 et AzureApi2 qui fonctionne bien pour eux individuellement. Cependant, comme il y a une API externe entre les deux et qui n'est pas sous mon contrôle, en cas de défaillance de cet appel API, je dois annuler l'opération complète. Actuellement, la première API est en train de revenir correctement, car le deuxième appel API est un appel http différent, il ne tombe pas avec la portée de la transaction du premier. J'ai besoin d'une approche pour annuler les données de la seconde base de données Sql en cas de défaillance.
Quelle est la meilleure option pour reculer manuellement dans une situation comme celle-ci?
Salut @amor merci pour votre réponse. La solution est belle mais un peu trop coûteuse en termes de temps et de ressources qui seront prises. En particulier ce cas où une entrée de requête http dépend du résultat de l'autre réponse http, je ne suis pas sûr que cette solution puisse être applicable. –
Cette solution fonctionnera pour toute transaction distribuée générale. La transaction distribuée nécessite un coordinateur pour surveiller les états. La raison pour laquelle nous utilisons la transaction distribuée est que nous voulons assurer la cohérence pour chaque branche de notre application. – Amor