Un paiement est encaissé, puis le processus doit réserver le stock, puis prévenir le client par e-mail. Le worker est redéployé entre la deuxième et la troisième étape. Qu’est-il arrivé à la commande ?
charge
Le job est réessayé depuis le début. Le client est encaissé une deuxième fois.
reserve-stock
Immobilisé pour une commande qui ne partira jamais — ou perdu, et vous survendez.
send-receipt
Ne s’exécute jamais. Le client n’entend absolument rien.
Vous l’apprenez par un ticket de support trois jours plus tard, et le seul retour possible est un script de réparation écrit à la main, en production.
charge
Revient du journal. Encaissé exactement une fois.
reserve-stock
Revient du journal. Réservé exactement une fois.
send-receipt
S’exécute une fois, après le redémarrage. L’e-mail part.
Rien ne lui est arrivé. Le paiement n’est pas rejoué, la réservation n’est pas perdue, et l’e-mail part quand même.
Rien n’a été encaissé deux fois. Rien n’a été perdu. Aucun cron n’est intervenu.