Pular para o conteúdo principal

Message Sequence

Descrição​

Message Sequence trata dados grandes demais para caber em uma única mensagem. Os dados são divididos em pedaços do tamanho de uma mensagem e enviados como uma sequência.

Cada mensagem leva três campos: um identificador de sequência, que agrupa as mensagens de um mesmo conjunto; um identificador de posição, que ordena a mensagem dentro do conjunto; e o tamanho total ou um marcador de fim na última mensagem. O receptor usa esses campos para remontar o dado original.

Problemas que resolve​

  • Enviar uma quantidade arbitrariamente grande de dados por mensageria.
  • Devolver uma resposta grande demais para uma única mensagem.
  • Permitir ao receptor saber quando recebeu o conjunto completo.

Quando usar​

  • Quando o payload excede o limite de tamanho do sistema de mensageria.
  • Quando uma resposta a uma requisição precisa ser fragmentada.
  • Quando o dado pode ser processado e remontado em partes.

Quando evitar​

  • Quando é possível guardar o dado em um armazenamento e enviar só uma referência (Claim Check).
  • Quando a ordem e a completude não podem ser garantidas pela infraestrutura e não há como remontar.

Trade-offs​

GanhoCusto / Risco
Transfere dados de qualquer tamanhoReceptor precisa remontar e lidar com mensagens faltantes
Cada mensagem é pequena e rápida de enviarOrdem e completude exigem controle explícito
Permite processamento em partesConsumidores concorrentes complicam a remontagem
  • Reúna as partes de uma sequência no mesmo consumidor, ou use um Resequencer.
  • Defina o que fazer se uma parte nunca chegar, por exemplo com expiração.

Diagrama​

O dado é dividido em mensagens numeradas dentro da mesma sequência e o receptor as remonta.

Padrões relacionados​

Referência​