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
Trade-offs
✗ Consistência eventual
✗ 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