FwEventBus
Event bus interno pra publish/subscribe entre modulos. Desacopla logica de notificacoes.
Assinatura: FwEventBus():publish(cTopico, oPayload) / :subscribe(cTopico, bHandler)
Retorna: NIL
FwEventBus permite arquitetura event-driven dentro do Protheus. Modulo A publica evento; modulo B (sem saber de A) reage.
// Publisher (M030INC)
User Function M030INC()
Local oEvento := JsonObject():New()
oEvento["acao"] := "criado"
oEvento["cliente"] := SA1->A1_COD
oEvento["loja"] := SA1->A1_LOJA
FwEventBus():publish("cliente.criado", oEvento)
Return
// Subscriber (outro modulo)
FwEventBus():subscribe("cliente.criado", {|oEvento|
U_SyncCRM(oEvento["cliente"], oEvento["loja"])
})
Pegadinhas
- Sincrono por default: publish bloqueia ate subscribers terminarem. Use async pra IO pesado.
- Subscriber lento bloqueia o publisher — cuidado.
- Pra durabilidade (sobrevive restart), use fila externa (RabbitMQ, Kafka).