Construindo um Aplicativo Reativo Orientado a Eventos com Fila de Mensagens Mortas

A arquitetura orientada a eventos facilita que os sistemas respondam a eventos da vida real, como quando o perfil do usuário é atualizado. Esta postagem ilustra a construção de aplicativos reativos orientados a eventos que lidam com perda de dados combinando Spring WebFlux, Apache Kafka e Dead Letter Queue. Quando usados juntos, eles fornecem o framework para criar sistemas tolerantes a falhas, resilientes e de alto desempenho, que são importantes para grandes aplicativos que precisam lidar com volumes massivos de dados de forma eficiente.

Recursos Utilizados neste Artigo

  • Spring Webflux: Ele fornece um paradigma reativo que depende de retroalimentação 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 dos produtores e consumidores do Kafka.
  • Fila de Mensagens Mortas (DLQ): Uma DLQ armazena mensagens temporariamente que não puderam ser processadas por diversos motivos. As mensagens da DLQ podem ser posteriormente usadas para reprocesar mensagens a fim de evitar perda de dados e tornar o processamento de eventos resiliente.

Produtor Reativo do Kafka

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

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

Consumidor Reactive Kafka

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

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

Fila de Mensagens Indesejadas (DLQ)

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

Vantagens da Integração da Fila de Mensagens Indesejadas

  • Ele 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 tantas 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 conforme mostrado abaixo:

Um Manipulador da 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 orientadas a eventos resilientes, tolerantes a falhas e eficientes. Os produtores reativos garantem a publicação de mensagens não bloqueantes; por outro lado, os consumidores reativos processam mensagens com backpressure, melhorando a responsividade. O DLQ fornece um mecanismo de fallback que evita interrupções e previne a perda de dados. 

A arquitetura acima garante a isolação de falhas no sistema e ajuda na depuração, o que pode ser ainda mais melhorado para aplicações.

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

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