Pular para o conteúdo principal

Event-Driven Consumer

Descrição​

Event-Driven Consumer é um consumidor que o próprio sistema de mensageria invoca quando uma mensagem chega ao canal, por meio de um callback. Enquanto não há mensagens, o consumidor pode ficar inativo, sem thread dedicada. Também é chamado de receptor assíncrono.

O modelo dá resposta imediata e evita consultas repetidas ao canal. Como a entrega é realmente orientada a eventos ou não é um detalhe de implementação do cliente de mensageria; o que importa é que a aplicação é acionada quando há mensagem.

Atenção à confirmação: confirmar automaticamente na entrega, antes de processar, é simples, mas perde o trabalho se o processamento falhar; nesse caso o consumidor não é um Transactional Client.

Problemas que resolve​

  • Latência causada por polling.
  • Threads ociosas esperando mensagens.
  • Código de laço de consumo repetido em cada aplicação.

Quando usar​

  • Quando a mensagem deve ser tratada o quanto antes.
  • Quando o volume é irregular e manter consumidores ativos seria desperdício.

Quando evitar​

  • Quando o consumidor precisa controlar a taxa de entrada, pois o push pode sobrecarregá-lo.
  • Quando o processamento deve ocorrer só em janelas específicas.

Trade-offs​

GanhoCusto / Risco
Baixa latênciaConsumidor pode ser inundado se não houver limite de prefetch
Sem consultas vaziasMenor controle do ritmo
Código simples baseado em callbackConfirmação automática pode perder mensagens
  • Limite a quantidade de mensagens em voo (prefetch) para proteger o consumidor.

Diagrama​

O canal aciona o consumidor, que repassa o conteúdo à aplicação e confirma ao final.

Padrões relacionados​

Referência​