J'ai vu récemment qu'il existe différents frameworks qui permettent l'utilisation d'une architecture de messagerie mais qui sont implémentés en cours, en utilisant des threads identiques et différents. Ceux que je connais sont Spring, Guava EventBus et Reactor.Quels sont les bons exemples d'utilisation d'un système d'événements en cours de traitement par rapport aux microservices avec un courtier?
Ma question concerne les cas d'utilisation où quelqu'un voudrait les utiliser plutôt que d'envoyer des messages à un courtier à part entière. Je comprends que son utilisation permet un meilleur découplage de la logique métier mais dans une architecture de microservices, vous publieriez normalement des événements à consommer par d'autres microservices. L'avantage de cela est la tolérance de panne que vous avez en ajoutant un groupe de courtiers où un message erroné causé par une défaillance dans une instance peut être réessayé par un autre. La mise en œuvre d'une logique décomposée et exécutée en envoyant des messages qui sont ensuite consommés par le même système, en particulier lorsque les abonnés sont exécutés dans des threads différents, me semble difficile de remettre les données dans un état cohérent.
Je ne suis pas d'accord avec le dernier point. Concevoir un système qui repose sur des messages internes pour améliorer la vitesse à moi laisse entendre qu'il n'en a pas vraiment besoin. S'appuyer sur un courtier externe pour envoyer des messages fournit un moyen de mettre à l'échelle le système en ajoutant simplement de nouvelles instances. De cette façon, n'importe quelle instance pourrait choisir un message et continuer avec le processus, en ajoutant la tolérance de panne quand elle est combinée avec réessayer pour les messages non traités après une panne de nœud. Si chaque message envoyé fait partie d'une chaîne d'événements, un message perdu peut perturber l'ensemble du système, ce qu'un cluster de courtiers externes aide à corriger. – Kilian