Projeto demonstrativo de integração assíncrona utilizando Kotlin Coroutines e Spring Boot, focado em resolver problemas de latência em sistemas distribuídos.
Demonstrar como as corrotinas do Kotlin podem ser utilizadas para:
- Reduzir a complexidade de operações assíncronas
- Melhorar o throughput em sistemas de alta concorrência
- Minimizar a latência em chamadas de rede
- Integrar eficientemente diferentes tecnologias (Kafka, HTTP APIs, Monitoramento)
Este projeto (Integrator) é a PARTE 2 do artigo técnico publicado no Medium:
Coroutines: Performance de aplicações em cenários críticos de latência
PARTE 1 - CDC Producer (Repositório GitHub):
- Implementação de um pipeline de dados usando:
- PostgreSQL + Debezium para Change Data Capture
- Kafka para streaming de eventos em tempo real
- Script Python para geração massiva de dados (10k+ eventos/sec)
PARTE 2 - Integrator (Este projeto)
Diagrama estrutural PARTE 1 + PARTE 2:
graph LR
P[(PostgreSQL)] --> D[Debezium]
D --> K[(Kafka)]
K --> I[Integrator]
I --> C1[Client 1 API]
I --> C2[Client 2 API]
I --> C3[Client 3 API]
-
Kafka Consumer (Spring Kafka)
- Consumo assíncrono de mensagens de status
- Processamento em lote não-bloqueante
-
HTTP Client (OkHttp + Coroutines)
- Chamadas de rede não-bloqueantes
- Timeouts configuráveis
-
Monitoring (Micrometer + Prometheus)
- Métricas de desempenho em tempo real
- Monitoramento de latência e throughput
sequenceDiagram
participant Kafka as Kafka
participant Consumer as Consumer
participant Processor as Coroutine Processor
participant HttpClient as OkHttp
participant Metrics as Micrometer
participant External as External API
Kafka->>Consumer: Poll messages (async)
Consumer->>Processor: launch coroutine per message
Processor->>HttpClient: POST /status (non-blocking)
HttpClient->>External: Async HTTP call
External-->>HttpClient: Response
HttpClient-->>Processor: Result
Processor->>Metrics: Record latency
Processor-->>Consumer: Acknowledge
Metrics->>Prometheus: Export metrics
| Tecnologia | Versão | Finalidade |
|---|---|---|
| Kotlin | 1.9.25 | Linguagem principal com corrotinas |
| Spring Boot | 3.4.2 | Framework base |
| Kafka (Spring) | 3.4.x | Mensageria assíncrona |
| OkHttp | 4.12.0 | Cliente HTTP não-bloqueante |
| Micrometer | 1.12.x | Monitoramento de métricas |
| JUnit 5 | 5.9.3 | Testes unitários e integração |
1. Suspensão Seletiva
suspend fun sendStatus(endpoint: ClientEndpoint, json: String): NetworkResult<String> {
return withContext(Dispatchers.IO) {
// Operação de I/O não-bloqueante
}
}2. Paralelismo Controlado
val results = listOf(asyncTasks).awaitAll()3. Resiliência
try {
// Tentativa principal
} catch (e: IOException) {
// Fallback estratégico
}| Métrica | Tipo | Descrição |
|---|---|---|
service.message.latency |
Timer | Latência total desde consumo até confirmação |
service.message.throughput |
Counter | Volume de mensagens processadas por minuto |
service.message.error |
Counter | Falhas em chamadas HTTP para APIs externas |
kafka.consumer.lag |
Gauge | Atraso na leitura das mensagens do Kafka |
-
Faça um Fork do Repositório
Clique aqui para criar seu fork -
Crie uma Branch para sua Feature
git checkout -b feature/nova-funcionalidade
-
Commits Semânticos Utilize o padrão de commits semânticos para manter o histórico organizado
git commit -m "feat: adiciona processamento em lote"
git commit -m "fix: corrige timeout nas chamadas HTTP"- Sincronize com Upstream
git pull upstream main- Envie seu Pull Request
Descreva claramente:
- Problema resolvido
- Mudanças implementadas
- Impacto na performance
Mantenedor Principal

