Patrons de conception/Outbox
Apparence
Patron de conception | |
---|---|
Catégorie : Autre | |
Nom français : | Boite d'envoi |
Nom anglais : | Outbox |
Stocker les évènements d'une mise à jour dans la même transaction. |
Principe
[modifier | modifier le wikicode]Lorsque l'on doit notifier de la mise à jour d'une base de données, plusieurs problèmes peuvent survenir :
- La base peut être mise à jour puis la notification envoyée (en asynchrone ou pas), et finalement échouer. Les notifiés considéreront alors que la base n'a pas été mise à jour à tort. Par exemple, à cause d'une panne du SMTP, et cet envoi ne peut pas faire partie d'un commit / rollback SQL.
- Si en envoie d'abord la notification puis met à jour la base, il y a un également risque que la seconde action échoue. Les notifiés considéreront alors que la base a pas été mise à jour à tort.
Le patron de conception Boîte d'envoi (Outbox) permet de résoudre tout cela en utilisant une table de la base de données pour stocker les messages de notification[1].
Ces derniers sont alors enregistrés en même temps que la mise à jour à notifier, dans la même transaction.
Ils sont donc fortement couplés : l'un ne peut pas aller sans l'autre.
Ils sont ensuite dépilés par le service qui assure la notification, et peuvent être rejoués en cas de problème d'envoi.