L’architecture orientée événements facilite la réponse des systèmes aux événements de la vie réelle, comme lorsque le profil de l’utilisateur est mis à jour. Cet article illustre la création d’applications réactives orientées événements qui gèrent la perte de données en combinant Spring WebFlux, Apache Kafka et Dead Letter Queue. Lorsqu’ils sont utilisés ensemble, ces outils fournissent le cadre nécessaire à la création de systèmes tolérants aux pannes, résilients et performants, ce qui est essentiel pour les grandes applications devant gérer de volumineux ensembles de données de manière efficace.
Fonctionnalités Utilisées dans cet Article
- Spring Webflux: Il fournit un paradigme réactif qui repose sur une pression arrière non bloquante pour le traitement simultané des événements.
- Apache Kafka: Les producteurs et consommateurs Kafka réactifs aident à construire des pipelines de traitement compétents et adaptables.
- Flux Réactifs: Ils ne bloquent pas l’exécution des flux des producteurs et consommateurs Kafka.
- Dead Letter Queue (DLQ): Une DLQ stocke temporairement les messages qui n’ont pas pu être traités pour diverses raisons. Les messages DLQ peuvent ensuite être utilisés pour re-traiter les messages afin de prévenir la perte de données et de rendre le traitement des événements résilient.
Producteur Kafka Réactif
Un producteur Kafka réactif envoie des messages en parallèle et ne bloque pas d’autres threads lors de la publication. Cela est bénéfique lorsqu’il y a de grandes quantités de données à traiter. Il s’intègre bien avec Spring WebFlux et gère la pression de retour au sein des architectures de microservices. Cette intégration aide non seulement à traiter de gros messages, mais aussi à bien gérer les ressources cloud.
Le producteur Kafka réactif montré ci-dessus peut être trouvé sur GitHub.
Consommateur Kafka réactif
Le consommateur Kafka réactif récupère des messages Kafka sans bloquer et maintient un débit élevé. Il prend également en charge la gestion de la pression de retour et s’intègre parfaitement avec WebFlux pour le traitement des données en temps réel. Le pipeline du consommateur réactif gère bien les ressources et est particulièrement adapté aux applications déployées dans le cloud.
Le consommateur Kafka réactif montré ci-dessus peut être trouvé sur GitHub.
File d’attente de messages en échec (DLQ)
Un DLQ est un simple sujet Kafka qui stocke les messages envoyés par les producteurs et qui n’ont pas pu être traités. En temps réel, nous avons besoin que les systèmes fonctionnent sans blocages ni échecs, et cela peut être réalisé en redirigeant de tels messages vers la Dead Letter Queue dans l’architecture orientée événements.
Avantages de l’intégration de la Dead Letter Queue
- Elle fournit un mécanisme de secours pour éviter l’interruption du flux de messages.
- Elle permet la rétention des données non traitées et aide à prévenir la perte de données.
- Elle stocke des métadonnées sur les échecs, ce qui aide finalement à analyser la cause profonde.
- Elle offre autant de tentatives que nécessaire pour traiter les messages non traités.
- Elle découple la gestion des erreurs et rend le système résilient.
Les messages échoués peuvent être envoyés vers le DLQ depuis le code du producteur comme indiqué ci-dessous :
Un Handler DLQ doit être créé dans le consommateur réactif comme montré ci-dessous :
Conclusion
L’incorporation de DLQ avec un producteur et un consommateur réactifs aide à construire des applications événementielles résilientes, tolérantes aux pannes et efficaces. Les producteurs réactifs garantissent une publication de messages non bloquante ; d’autre part, les consommateurs réactifs traitent les messages avec de la rétroaction, améliorant la réactivité. Le DLQ fournit un mécanisme de secours prévenant les interruptions et évitant la perte de données.
L’architecture ci-dessus assure l’isolation des défaillances du système et aide au débogage, ce qui peut ensuite être résolu pour améliorer les applications.
Le code de référence ci-dessus peut être trouvé dans le producteur GitHub et le consommateur GitHub.
Plus de détails concernant le producteur et le consommateur réactifs peuvent être trouvés sur ReactiveEventDriven. Spring Apache Kafka fournit plus d’informations concernant DLQ.
Source:
https://dzone.com/articles/reactive-event-driven-app-with-dead-letter-queue