Pular para o conteúdo principal

Resequencer

Descrição​

O Resequencer é um filtro com estado que coleta e reordena mensagens antes de publicá-las. Mantém em um buffer interno as mensagens fora de ordem, espera até ter uma sequência consecutiva completa e então as publica em ordem no canal de saída.

O problema nasce porque roteadores e caminhos paralelos fazem cada mensagem seguir um percurso, e algumas chegam antes de outras. Certas etapas seguintes, porém, exigem sequência, por exemplo para preservar integridade referencial.

O Resequencer não altera o conteúdo, apenas a ordem. Para que a ordem se mantenha, o canal de saída também deve preservá-la.

Problemas que resolve​

  • Mensagens relacionadas chegam embaralhadas depois de caminhos distintos
  • Consumidores dependem da ordem para manter a consistência
  • Processamento paralelo quebra a ordem original

Quando usar​

  • A ordem de processamento importa e o transporte não a garante
  • Há paralelismo ou roteamento que embaralha mensagens de uma mesma sequência
  • As mensagens carregam número de sequência

Quando evitar​

  • A ordem não importa para o consumidor
  • É possível evitar o problema com um único consumidor ou partições por chave
  • A tolerância a atraso é baixa e uma mensagem perdida bloquearia o fluxo

Trade-offs​

GanhoCusto / Risco
Ordem restaurada para quem a exigeLatência: mensagens esperam as faltantes
Consumidores mais simplesMemória para o buffer e estado
Conteúdo preservadoMensagem perdida pode travar a sequência
  • Timeout: defina o que fazer com lacunas na sequência.
  • Sequência por grupo: reordene por chave, para não bloquear grupos independentes.

Diagrama​

As mensagens chegam fora de ordem, ficam no buffer e saem em sequência.

Padrões relacionados​

Referência​