Arquitetura Orientada a Eventos

Definição

A Arquitetura Orientada a Eventos (Event-Driven Architecture) é um modelo arquitetural baseado na emissão, detecção e reação a eventos. Em vez de chamadas diretas entre componentes, os sistemas se comunicam de forma indireta, por meio de eventos transmitidos e processados de forma assíncrona.

Um evento é uma notificação de que algo aconteceu — por exemplo, "pedido criado" ou "pagamento aprovado". Outros componentes podem escutar e reagir a esses eventos sem que o emissor precise conhecer os receptores.

Por que é importante

Essa arquitetura é especialmente útil em sistemas distribuídos, aplicações escaláveis e ambientes com alto volume de interações. Ela promove baixo acoplamento entre os componentes e oferece flexibilidade para evolução do sistema.

Também facilita a construção de fluxos assíncronos, permite o uso de event sourcing e melhora a capacidade de auditabilidade e rastreabilidade de ações.

Estrutura típica

Um sistema orientado a eventos geralmente envolve três papéis principais:

  • Emissor de Evento (Producer): gera um evento quando algo relevante acontece.
  • Canal de Mensagens: meio pelo qual os eventos são transmitidos (como fila, barramento ou tópico de mensageria).
  • Consumidor de Evento (Listener/Handler): recebe o evento e executa uma ação com base nele.
[ Componente A ]
        └─ Evento: "Pedido Criado"
                ↓
        [ Fila / Tópico / Barramento ]
                ↓
[ Componente B ]  [ Componente C ]
(envia e-mail)     (atualiza estoque)

Como os componentes são desacoplados, é possível adicionar ou remover consumidores sem alterar o emissor.

Exemplo de aplicação

Um sistema de e-commerce pode funcionar assim:

  • Quando um pedido é criado, o sistema emite um evento PedidoCriado.
  • O serviço de notificação escuta esse evento e envia um e-mail ao cliente.
  • O serviço de logística escuta o mesmo evento e inicia a separação dos produtos.
  • Nenhum desses serviços conhece os outros diretamente.

Exemplo prático (em Python)

Simulando o fluxo de eventos sem infraestrutura real de mensageria:

# Barramento de eventos simples
class EventBus:
    def __init__(self):
        self.assinantes = {}

    def registrar(self, evento, callback):
        self.assinantes.setdefault(evento, []).append(callback)

    def emitir(self, evento, dados):
        for callback in self.assinantes.get(evento, []):
            callback(dados)

# Serviços consumidores
def enviar_email(dados):
    print(f"[Email] Enviado para {dados['cliente']} sobre o pedido #{dados['id']}")

def atualizar_estoque(dados):
    print(f"[Estoque] Produtos do pedido #{dados['id']} separados")

# Simulando a emissão
eventos = EventBus()
eventos.registrar("PedidoCriado", enviar_email)
eventos.registrar("PedidoCriado", atualizar_estoque)

# Emissor
eventos.emitir("PedidoCriado", {"id": 101, "cliente": "Alice"})

Aqui, o componente que emite o evento não conhece os consumidores. Novos comportamentos podem ser adicionados registrando funções sem modificar o código existente.

Relacionados

Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com