Lädt...

🔧 🧪 Validando Mensagens no Kafka com Kotlin e Awaitility


Nachrichtenbereich: 🔧 Programmierung
🔗 Quelle: dev.to

Fala pessoal! Neste post, vou te guiar por um exemplo prático de como testar a publicação de mensagens em um tópico Kafka usando Kotlin, Awaitility e o KafkaConsumer. Esse tipo de validação é essencial em sistemas distribuídos para garantir que as mensagens sejam enviadas e recebidas corretamente.

📚 Estrutura do Projeto

A estrutura básica do projeto é assim:

.
├── src
│   ├── main
│   │    └── kotlin
│   │         └── api
│   │              └── KafkaProducerService.kt
│   └── test
│        └── kotlin
│             └── api
│                  └── KafkaApiTest.kt
└── pom.xml (ou build.gradle.kts para Kotlin)

Certifique-se de incluir as seguintes dependências no seu pom.xml (Maven) ou build.gradle.kts (Gradle):

<dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>3.7.0</version>
</dependency>

<dependency>
    <groupId>org.awaitility</groupId>
    <artifactId>awaitility</artifactId>
    <version>4.2.0</version>
</dependency>

<dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-kotlin</artifactId>
    <version>2.16.0</version>
</dependency>

🤔 O Que é o Awaitility?

O Awaitility é uma biblioteca Java/Kotlin projetada para facilitar a espera por condições assíncronas em testes. Em vez de usar Thread.sleep() (o que é ineficiente), o Awaitility permite esperar de forma mais inteligente até que uma condição seja atendida.

✅ Por que usar Awaitility com Kafka?

  • Os consumidores Kafka não recebem mensagens imediatamente (processamento assíncrono).

  • Precisamos esperar até que a mensagem seja publicada no tópico e lida pelo consumidor.

📊 Exemplo Prático: Validando Transações Bancárias

Vamos criar um teste que:

  1. Publica uma mensagem de uma transação bancária em um tópico Kafka.

  2. Consome a mensagem do tópico.

  3. Valida se o conteúdo recebido está correto.

🛠️ O Modelo de Transação

📬 O Teste com Kafka e Awaitility

🧐 Explicando o Teste

  1. Produzimos uma mensagem Kafka com kafkaProducer.sendMessage().

Tela do IntelliJ com teste executado com sucesso

  1. Consumimos com kafkaConsumer.poll().

  2. Usamos o await().untilAsserted para esperar até a mensagem ser validada.

Se a mensagem não for encontrada ou os dados estiverem incorretos, o teste falha com uma mensagem de erro clara. ✅

Tela do Docker com o tópico da transação feita pelo teste

📢 Conclusão

Testar mensagens Kafka de forma assíncrona é essencial para garantir a integridade do sistema. Usando o Awaitility com KafkaConsumer, conseguimos validar mensagens de forma eficiente.

Se você gostou do conteúdo ou tem dúvidas, deixe um comentário! 🚀

👉 Me siga no dev.to para mais conteúdo de qualidade!

Happy coding! 💻

🔗 Links Referencias e Projeto no GitHub

...

🔧 🧪 Validando Mensagens no Kafka com Kotlin e Awaitility


📈 115.36 Punkte
🔧 Programmierung

🔧 Kong Gateway - Validando configurações específicas para exposição de serviços


📈 27.43 Punkte
🔧 Programmierung

🔧 Kong Gateway - Validando configurações específicas para exposição de serviços


📈 27.43 Punkte
🔧 Programmierung

🔧 Validando CPF e CNPJ com uma Annotation Customizada em Java


📈 27.43 Punkte
🔧 Programmierung

🔧 Validando CPF e CNPJ com uma Annotation Customizada em Java


📈 27.43 Punkte
🔧 Programmierung

🔧 Validando parâmetros de métodos com a classe Assert do Spring


📈 27.43 Punkte
🔧 Programmierung

🔧 NestJS - Validando o envio de arquivos


📈 27.43 Punkte
🔧 Programmierung

🔧 Docker Build Checks: Validando seus Dockerfiles antes dos Builds


📈 27.43 Punkte
🔧 Programmierung

🔧 Validando input file e select com Yup


📈 27.43 Punkte
🔧 Programmierung

🔧 Integração de Microsserviços e Processamento de Mensagens com MassTransit e RabbitMQ


📈 25.45 Punkte
🔧 Programmierung

🔧 Commits Semânticos: Organizando o Caos com Padrões de Mensagens


📈 25.45 Punkte
🔧 Programmierung

🔧 Como processar mensagens de uma Fila RabbitMQ com Golang?


📈 25.45 Punkte
🔧 Programmierung

🔧 Como Receber Mensagens no Discord com Cloudflare Functions


📈 25.45 Punkte
🔧 Programmierung

🔧 [PT-BR] Escrevendo Boas Mensagens de Commit


📈 25.45 Punkte
🔧 Programmierung

🔧 Formas simples de escrever mensagens de git


📈 25.45 Punkte
🔧 Programmierung

🔧 API open-source para enviar mensagens no Whatsapp


📈 25.45 Punkte
🔧 Programmierung

🔧 Envio e recebimento de mensagens de texto dentro de imagens com Python


📈 25.45 Punkte
🔧 Programmierung

🔧 Interceptando mensagens de erro com o nginx


📈 25.45 Punkte
🔧 Programmierung

🍏 Como enviar mensagens no Instagram: tutorial para usuários de Mac


📈 25.45 Punkte
🍏 iOS / Mac OS

🔧 Como publicar mensagens no Broker MQTT usando a BananaPi e Python


📈 25.45 Punkte
🔧 Programmierung

🔧 Do Caos a Consistência: A Ordem das Mensagens em Sistemas Distribuídos


📈 25.45 Punkte
🔧 Programmierung

🔧 Do Caos a Consistência: A Ordem das Mensagens em Sistemas Distribuídos


📈 25.45 Punkte
🔧 Programmierung

🔧 Kotlin Type Inference vs. Java: A Deductive Dance (Where Kotlin Takes the Lead!)


📈 24.16 Punkte
🔧 Programmierung

🔧 Kotlin Type Inference vs. Java: A Deductive Dance (Where Kotlin Takes the Lead!)


📈 24.16 Punkte
🔧 Programmierung

🔧 Decoding Kotlin - Your guide to solving the mysterious in Kotlin


📈 24.16 Punkte
🔧 Programmierung

🔧 🛰️ SpaceX Kotlin API Library – Open-Source Kotlin Library for SpaceX API Integration


📈 24.16 Punkte
🔧 Programmierung

🔧 Kotlin Multiplataforma 101: Entendendo como o Kotlin compila para múltiplas plataformas


📈 24.16 Punkte
🔧 Programmierung

🔧 From Java to Kotlin: A Java Developer's Guide to Kotlin Basics


📈 24.16 Punkte
🔧 Programmierung

📰 heise-Angebot: Rheinwerk Konferenz für Kotlin: Ein Tag voller Kotlin am 22. April


📈 24.16 Punkte
📰 IT Nachrichten

🎥 Kotlin: Using WorkManager Kotlin APIs - MAD Skills


📈 24.16 Punkte
🎥 Video | Youtube

🔧 Kotlin Lambdas with Receivers vs. Java: A Code Symphony (Where Kotlin Plays a Different Tune!)


📈 24.16 Punkte
🔧 Programmierung

🎥 Kotlin: Using Room Kotlin APIs - MAD Skills


📈 24.16 Punkte
🎥 Video | Youtube

matomo