AULA 33
MÓDULO 3
orientação a eventos
⏱ 55 min
Event-Driven Architecture
EDA: serviços comunicam via eventos assíncronos. Message brokers: Kafka vs RabbitMQ vs Redis. BullMQ para filas em Node.js. Consistência eventual.
EDAbrokerKafkaRabbitMQBullMQconsistência eventualidempotência
Event-Driven Architecture
EDA é um estilo arquitetural onde componentes se comunicam exclusivamente via eventos assíncronos. Nenhum serviço chama outro diretamente — todos publicam e consomem eventos de um message broker.
ARQUITETURA ORIENTADA A EVENTOS
PRODUCER
Order Service
→
BROKER
Kafka/RabbitMQ
→
CONSUMER 1
Email Service
→
CONSUMER 2
Stock Service
message brokers
Kafka: alta throughput, log persistente, reprocessamento. RabbitMQ: mais simples, filas flexíveis, roteamento. Redis Streams: leve, in-process. Use Kafka para analytics e eventos de alto volume; RabbitMQ para filas de tarefas.Vantagens e trade-offs
Vantagens
✓ Desacoplamento total
✓ Escalabilidade independente
✓ Resiliência — falha não propaga
✓ Auditoria — log de todos os eventos
✓ Replay de eventos
✓ Escalabilidade independente
✓ Resiliência — falha não propaga
✓ Auditoria — log de todos os eventos
✓ Replay de eventos
Trade-offs
✗ Consistência eventual
✗ Debugging complexo
✗ Overhead operacional
✗ Ordenação de eventos
✗ Idempotência obrigatória
✗ Debugging complexo
✗ Overhead operacional
✗ Ordenação de eventos
✗ Idempotência obrigatória
javascript
// BullMQ — filas de eventos em Node.js com Redis const { Queue, Worker } = require('bullmq') // Producer — adicionar job à fila const emailQueue = new Queue('email', { connection: { host: 'localhost' } }) async function onOrderCreated(order) { await emailQueue.add('send-welcome', { to: order.email, orderId: order.id }, { attempts: 3, // retry até 3x backoff: 2000 // esperar 2s entre tentativas }) } // Consumer — processar jobs const worker = new Worker('email', async (job) => { const { to, orderId } = job.data await emailService.send({ to, subject: `Pedido ${orderId} confirmado` }) }, { connection: { host: 'localhost' }, concurrency: 5 })
quiz · aula 33
Teste seus conhecimentos
0/3 respondidas
QUESTÃO 01
O que diferencia EDA de chamadas síncronas diretas entre serviços?
QUESTÃO 02
Consistência eventual em EDA significa...
QUESTÃO 03
Por que idempotência é obrigatória em consumers EDA?
0/3