Messaging Patterns
Comunicacao assincrona entre servicos: filas, topicos, pub/sub, request-reply e service bus
Principio: Messaging desacopla servicos no tempo e no espaco. O produtor nao precisa saber quem consome, nem quando. Isso gera resiliencia, escalabilidade e peak shaving.
O que e Messaging?
Messaging e o padrao de comunicacao assincrona entre servicos. Em vez de chamadas HTTP diretas (sincrono, acoplado), um servico envia uma mensagem para um broker intermediario. O consumidor processa quando estiver pronto.
Por que usar Messaging?
| Beneficio | Explicacao |
|---|---|
| Desacoplamento | Produtor e consumidor nao se conhecem. Podem evoluir independentemente. |
| Resiliencia | Se o consumidor estiver fora, a mensagem fica no broker ate ele voltar. Nenhum dado perdido. |
| Escalabilidade | Adicione mais consumidores para processar em paralelo (competing consumers). |
| Peak Shaving | Picos de carga sao absorvidos pela fila. Consumidores processam no seu ritmo. |
| Auditoria | Mensagens podem ser persistidas, reprocessadas e auditadas. |
Fluxo basico: Producer - Broker - Consumer
Termos-chave
| Termo | Definicao |
|---|---|
| Producer | Servico que envia a mensagem ao broker. |
| Consumer | Servico que le e processa a mensagem. |
| Broker | Intermediario que armazena e roteia mensagens (RabbitMQ, Kafka, Azure Service Bus). |
| Message | Payload serializado (JSON, Protobuf) com headers e metadados. |
| Queue | Fila FIFO. Cada mensagem e entregue a um unico consumidor. |
| Topic / Exchange | Ponto de distribuicao que roteia mensagens para uma ou mais filas/subscriptions. |
| Binding | Regra que conecta um exchange a uma fila (routing key, headers, fanout). |
| Acknowledgment (ACK) | Consumidor confirma que processou. Broker remove da fila apos ACK. |
| Dead Letter Queue (DLQ) | Fila para mensagens que falharam apos N tentativas. Permite analise e reprocessamento. |
Garantias de entrega
| Garantia | Comportamento | Trade-off |
|---|---|---|
| At-most-once | Mensagem pode ser perdida, mas nunca duplicada. Fire-and-forget. | Mais rapido, mas risco de perda. Bom para metricas/logs nao criticos. |
| At-least-once | Mensagem nunca e perdida, mas pode ser entregue mais de uma vez. | Consumidor precisa ser idempotente. Padrao mais usado em producao. |
| Exactly-once | Mensagem entregue exatamente uma vez. Requer transacao distribuida ou deduplicacao. | Muito caro em performance. Kafka Transactions + idempotent producer chega perto. |
Qual a diferenca entre comunicacao sincrona (HTTP) e assincrona (messaging)?
HTTP sincrono: o caller bloqueia esperando resposta. Acoplamento temporal β se o destino estiver fora, a chamada falha. Messaging assincrono: o produtor envia e segue. O broker armazena a mensagem. O consumidor processa quando puder. Vantagens do messaging: resiliencia (broker persiste), escalabilidade (competing consumers), peak shaving (fila absorve picos). Desvantagens: complexidade operacional, eventual consistency, debugging mais dificil (tracing distribuido necessario).