O Que É Publish-Subscribe? Uma Mensagem, Muitos Ouvintes
Publish-subscribe (pub/sub) é um padrão de mensageria em que um publisher emite uma mensagem para um tópico e qualquer número de subscribers recebe uma cópia.
Pub/sub é o primo de fan-out de uma fila simples. Um publisher não envia para um consumidor específico; ele publica em um tópico, e cada subscriber daquele tópico recebe a própria cópia. O publisher não faz ideia de quem está ouvindo, o que torna trivial adicionar novos consumidores sem tocar no produtor.
Como o fan-out funciona
O publisher emite uma mensagem para um tópico nomeado. O broker entrega uma cópia a cada subscriber. Os subscribers são independentes: um pode estar lento ou fora do ar sem afetar os outros, e cada um processa a mensagem no próprio ritmo.
Pub/sub versus uma fila
Uma fila simples entrega cada mensagem a um consumidor; pub/sub entrega cada mensagem a todos os subscribers. Use uma fila para distribuir trabalho, e pub/sub para transmitir fatos que muitas partes se importam.
Por que desacopla tão bem
- Publishers não precisam de conhecimento sobre subscribers.
- Novos subscribers são adicionados sem mudar o publisher.
- Subscribers falham e se recuperam de forma independente.
- Mapeia naturalmente em designs orientados a eventos.
Testando o fan-out
Verificar pub/sub no CI significa afirmar que publicar um evento dispara cada subscriber esperado. Isso normalmente precisa de um broker real e de esperar cuidadosamente pela entrega assíncrona, o que é mais elaborado do que um único teste de requisição-resposta.
O esquema é um contrato compartilhado
Como muitos subscribers consomem a mesma mensagem, seu esquema é um contrato com todos eles. Uma mudança quebradora na mensagem publicada pode quebrar vários consumidores de uma vez, então esquemas de eventos retrocompatíveis são essenciais antes de deploys independentes.
Testes assíncronos em runners aquecidos
Testes de pub/sub esperam pela entrega assíncrona e muitas vezes sobem um broker, então rodam por mais tempo do que testes síncronos. Runners aquecidos (como os que o Latchkey fornece) mantêm o custo de wall-clock sob controle.
Principais conclusões
- Publish-subscribe entrega cada mensagem a todos os subscribers de um tópico.
- Ele desacopla completamente publishers dos consumidores que ouvem.
- O esquema de uma mensagem publicada é um contrato compartilhado entre todos os subscribers.