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

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.


L'outbox pattern permet de résoudre tout cela en utilisant une table 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.

Références

modifier