Aller au contenu

Inbox transactionnelle

Une inbox transactionnelle utilise des enregistrements durables de messages pour protéger le traitement local contre les livraisons en double.

Également appeléTransactional inbox
Interfaces & intégration

Une inbox transactionnelle utilise des enregistrements durables de messages pour protéger le traitement local contre les livraisons en double. Dans la variante décrite ici, la trace du traitement d’un message et sa modification métier sont enregistrées dans la même transaction de base de données.

Un service fictif dont le nom de consommateur est report-worker reçoit le message E-42. Il inscrit la combinaison du consommateur et de l’identifiant du message dans son inbox et fait passer un compteur de rapport de 6 à 7. Les deux changements sont validés ensemble. Une contrainte d’unicité en base sur cette combinaison protège aussi contre les instances qui travaillent simultanément. Vérifier d’abord, puis écrire ne suffit pas à lui seul.

Le moment de l’arrêt compte

Si la transaction échoue avant le commit, ni l’entrée d’inbox ni la modification du compteur ne persistent. Si le commit réussit mais que l’acquittement envoyé ensuite au broker se perd, E-42 peut arriver à nouveau. L’entrée existante empêche alors une nouvelle augmentation à 8. L’acquittement au broker ne fait pas lui-même partie de cette transaction locale.

L’idempotence décrit l’effet sûr d’une répétition ; l’inbox est un modèle possible pour l’obtenir. Une outbox enregistre les messages sortants avec la modification locale. L’inbox seule ne garantit pas qu’un appel HTTP externe soit exécuté ou qu’un e-mail soit envoyé exactement une fois. La conservation des identifiants doit couvrir la fenêtre possible de nouvelle livraison et de rejeu : des entrées supprimées trop tôt ne protègent plus contre les doublons tardifs.

Sources

Articles sur le sujet

Interfaces & intégration avec ASES

ERP, CRM et boutique bien connectés