Kyrux
Voltar

EventBus

Sistema de eventos desacoplados. Útil para comunicação entre apps sem importação direta.

Publicar evento

// Em qualquer view ou service:
fw.Events.Publish("usuario.criado", map[string]any{
    "id":    usuario.ID,
    "email": usuario.Email,
})

Assinar evento

// No init() do app ou no Register():
func init() {
    // fw deve ser acessível aqui (via variável de pacote ou injeção)
    fw.Events.Subscribe("usuario.criado", func(payload any) {
        dados := payload.(map[string]any)
        email := dados["email"].(string)
        enviarEmailBoasVindas(email)
    })
}

Cancelar assinatura

fw.Events.Unsubscribe("usuario.criado")

Handlers do EventBus rodam em goroutines separadas. Use sincronização se necessário.

EventBus vs Queue

EventBus é pub/sub fire-and-forget: todos os subscribers recebem, sem retry, sem garantia de processamento. Para trabalho que não pode se perder num pico (e-mails, webhooks, processamento de mídia), com retry automático e um worker por tarefa, veja Fila (Queue).