Je conçois un système avec de multiples contextes délimités (microservices). J'aurai 2 types d'événements.
Domain Events
qui se produit "en mémoire" dans le cadre d'une transaction unique (synchronisation)Integration Events,
qui sont utilisés entre des contextes délimités (asynchrones)
Mon problème est de savoir comment s'assurer qu'une fois la transaction validée (à ce stade, je suis sûr que toutes les transactions sont validées), l'opération est validée. Domain Events
ont été traitées avec succès) que Integration Events
sont également couronnés de succès.
Lorsque ma transaction est validée, j'envoie normalement Integration Events
(par exemple, dans la file d'attente), mais il est possible que cette file d'attente soit également en panne, de sorte que la transaction qui vient d'être engagée doit être "annulée". Comment cela se passe-t-il ?
La seule solution qui me vient à l'esprit est de stocker les Integration Events
à la même base de données, dans la même transaction, puis de traiter le Integration Events
et les pousser dans la file d'attente - ce serait quelque chose comme "utiliser la base de données actuelle, comme une pré-file d'attente, avant de la pousser dans la file d'attente". La vraie file d'attente (cependant, j'ai lu que l'utilisation de la base de données pour cela est un anti-modèle).
Existe-t-il un modèle (une approche fiable) pour s'assurer que les deux : Validation de la transaction y Message poussé dans la file d'attente est une opération atomique ?
EDIT Après avoir lu https://devblogs.microsoft.com/cesardelatorre/domain-events-vs-integration-events-in-domain-driven-design-and-microservices-architectures/ L'auteur suggère en fait l'approche de la "pré-queue" dans la même base de données (il l'appelle "prêt à publier l'événement").