Construindo um Aplicativo Reativo Baseado em Eventos com Fila de Mensagens Mortas

Arquitetura orientada a eventos facilita sistemas para responder a eventos da vida real, como quando o perfil do usuário é atualizado. Esta postagem ilustra a construção de aplicações reativas orientadas a eventos que lidam com perda de dados combinando Spring WebFlux, Apache Kafka e Fila de Mensagens Mortas. Quando usados juntos, esses fornecem o framework para criar sistemas tolerantes a falhas, resilientes e de alto desempenho que são importantes para grandes aplicações que precisam lidar com volumes massivos de dados de forma eficiente.

Recursos Usados neste Artigo

  • Spring Webflux: Ele fornece um paradigma reativo que depende de pressão de retorno não bloqueante para o processamento simultâneo de eventos.
  • Apache Kafka: Produtores e consumidores reativos do Kafka ajudam na construção de pipelines de processamento competentes e adaptáveis.
  • Fluxos Reativos: Eles não bloqueiam a execução dos fluxos de produtores e consumidores do Kafka.
  • Fila de Mensagens Mortas (DLQ): Uma DLQ armazena mensagens temporariamente que não puderam ser processadas devido a vários motivos. As mensagens da DLQ podem ser posteriormente usadas para reprocesar mensagens para evitar perda de dados e tornar o processamento de eventos resiliente.

Produtor de Kafka Reativo

Um Produtor Reativo Kafka envia mensagens em paralelo e não bloqueia outras threads durante a publicação. É benéfico onde há grande quantidade de dados a serem processados. Ele se integra bem com o Spring WebFlux e lida com a contra pressão dentro de arquiteturas de microsserviços. Essa integração ajuda não apenas no processamento de grandes mensagens, mas também na gestão eficiente de recursos na nuvem. 

O produtor reativo Kafka mencionado acima pode ser encontrado no GitHub.

Consumidor Reativo Kafka

O Consumidor Reativo Kafka recebe mensagens do Kafka sem bloqueio e mantém alta taxa de transferência. Ele também suporta o tratamento de contra pressão e se integra perfeitamente com o WebFlux para o processamento de dados em tempo real. O pipeline do consumidor reativo gerencia bem os recursos e é altamente adequado para aplicações implantadas na nuvem. 

O consumidor reativo Kafka mencionado acima pode ser encontrado no GitHub.

Fila de Cartas Mortas (DLQ)

Um DLQ é um tópico simples do Kafka que armazena mensagens enviadas por produtores e que não conseguem ser processadas. Em tempo real, precisamos que os sistemas sejam funcionais sem bloqueios e falhas, e isso pode ser alcançado redirecionando tais mensagens para a Fila de Mensagens Não Processadas na arquitetura orientada a eventos. 

Benefícios da Integração da Fila de Mensagens Não Processadas

  • Fornece um mecanismo de fallback para evitar interrupções no fluxo de mensagens.
  • Permite a retenção de dados não processados e ajuda a evitar a perda de dados.
  • Armazena metadados para falhas, o que eventualmente ajuda na análise da causa raiz.
  • Fornece várias tentativas para processar mensagens não processadas.
  • Desacopla o tratamento de erros e torna o sistema resiliente.

As mensagens com falha podem ser enviadas para a DLQ a partir do código do produtor como mostrado abaixo:

Um Manipulador de DLQ precisa ser criado no consumidor reativo conforme mostrado abaixo:

Conclusão

A incorporação do DLQ com um produtor e consumidor reativos ajuda a construir aplicações resilientes, tolerantes a falhas e eficientes orientadas a eventos. Os produtores reativos garantem a publicação de mensagens não bloqueantes; por outro lado, os consumidores reativos processam mensagens com backpressure, melhorando a capacidade de resposta. O DLQ fornece um mecanismo de fallback que evita interrupções e previne a perda de dados. 

A arquitetura acima garante a isolamento de falhas do sistema e auxilia na depuração, o que pode ser posteriormente abordado para melhorar as aplicações.

O código de referência acima pode ser encontrado no GitHub do produtor e no GitHub do consumidor

Mais detalhes sobre o produtor e consumidor reativos podem ser encontrados em ReactiveEventDriven. Spring Apache Kafka documenta mais informações sobre o DLQ.

Source:
https://dzone.com/articles/reactive-event-driven-app-with-dead-letter-queue