Imaginons que vous construisez un service de paiement pour un site web eCommerce. Lorsqu'une commande est passée, le service de Commande demandera à votre service de Paiement d'autoriser la carte de crédit du client. Ce n'est que lorsque la carte de crédit a été autorisée que le service de Commande enverra la commande à l'entrepôt pour l'emballage et l'expédition.
Vous devez vous mettre d'accord avec l'équipe travaillant sur le service de Commande sur la manière dont cette demande d'autorisation de carte de crédit est envoyée de leur service au vôtre. Il existe deux options.
- Basé sur des messages : Lorsqu'une commande est passée, le service de Commande envoie une demande d'autorisation à votre service de Paiement. Votre service traite la demande et renvoie un succès/échec au service de Commande. La demande initiale et le résultat pourraient être envoyés de manière synchrone ou asynchrone.
- Basé sur les événements : Lorsqu'une commande est passée, le service de Commande publie un événement NouvelleCommande. Votre service de Paiement s'abonne à ce type d'événement pour le déclencher. Votre service traite la demande et publie un événement AutorisationAcceptée ou un événement AutorisationRefusée. Le service de Commande s'abonne à ces types d'événements. Tous les événements sont asynchrones.
Un avantage de l'approche basée sur les événements est que d'autres services pourraient également s'abonner aux différents événements. Par exemple, il pourrait y avoir un service de Reporting de Revenus qui s'abonne aux événements AutorisationAcceptée et crée des rapports pour l'équipe financière.
Un inconvénient de l'approche basée sur les événements est que le système dans son ensemble devient un peu plus difficile à comprendre. Par exemple, imaginons que l'équipe travaillant sur le service de Commande vous demande de remplacer l'événement AutorisationRefusée par différents événements en fonction de la raison pour laquelle la carte de crédit a été refusée (pas de fonds, compte fermé, adresse de facturation incorrecte, etc). Si vous cessez de publier des événements AutorisationRefusée, est-ce que cela va casser certains autres services? Si vous avez de nombreux événements et services, cela pourrait être difficile à identifier.