Pular para o conteúdo principal

Polling Consumer

Descrição​

Polling Consumer é um consumidor que só recebe uma mensagem quando a aplicação pede. Funciona como um laço: pede uma mensagem, processa, pede a próxima. Assim a aplicação controla o ritmo e decide quando está pronta para trabalhar.

As APIs de mensageria costumam oferecer receive bloqueante, que espera até chegar uma mensagem, e não bloqueante, que retorna imediatamente se não houver nenhuma. O primeiro prende uma thread; o segundo pode desperdiçar ciclos se a chegada for lenta.

É o oposto do Event-Driven Consumer, em que o sistema de mensageria aciona a aplicação.

Problemas que resolve​

  • Consumidor que precisa limitar sua taxa de processamento (backpressure natural).
  • Aplicação que só pode processar mensagens em determinadas janelas.
  • Ambientes onde não há callback disponível.

Quando usar​

  • Quando a aplicação precisa controlar quando e quantas mensagens consome.
  • Em processamento em lote ou em janelas definidas.

Quando evitar​

  • Quando a latência de entrega deve ser mínima e o intervalo de polling a prejudicaria.
  • Quando o polling vazio gera custo desnecessário (por exemplo, serviços cobrados por requisição).

Trade-offs​

GanhoCusto / Risco
Controle de ritmo e de carga pelo consumidorLatência até o próximo polling
Simplicidade de implementaçãoConsultas vazias consomem recursos
Fácil de combinar com lotesReceive bloqueante ocupa threads
  • O intervalo de polling é um parâmetro de ajuste entre latência e custo.

Diagrama​

A aplicação pede mensagens em laço e processa cada uma que chega.

Padrões relacionados​

Referência​