Este tópico explica por que as operações BatchReceiveMessage e BatchPeekMessage retornam menos mensagens do que o total de mensagens visíveis em uma fila.
O serviço de filas do Simple Message Queue (formerly MNS) é serverless e utiliza múltiplos nós de computação e dados. A quantidade de nós pode variar de dezenas a centenas, ajustando-se conforme o tráfego geral e o volume de mensagens na região. Mensagens consecutivas podem estar armazenadas em nós diferentes. Por exemplo, a Mensagem 1 pode estar no Nó 1, enquanto a Mensagem 2 pode estar no Nó 2.
BatchReceiveMessage
Ao recuperar mensagens com a operação BatchReceiveMessage, o balanceamento de carga seleciona primeiramente um nó de dados. Em seguida, a operação tenta obter até 'n' mensagens em lote. Caso encontre mensagens, o sistema as retorna imediatamente. Se não houver mensagens disponíveis, o balanceamento de carga escolhe outro nó de dados e tenta novamente. Esse mecanismo de retorno rápido garante o desempenho da operação. Todas as mensagens serão eventualmente consumidas se você chamar a operação BatchReceiveMessage continuamente.
Por exemplo, considere uma fila com 11 mensagens. Você chama a operação BatchReceiveMessage uma vez para ler no máximo 15 mensagens. No entanto, as 11 mensagens estão distribuídas em vários nós de dados. A operação BatchReceiveMessage localiza qualquer nó que possua mensagens e as retorna prontamente. Portanto, o número de mensagens retornadas pode ser inferior a 11.
BatchPeekMessage
Esta operação utiliza o mesmo mecanismo da BatchReceiveMessage. As principais diferenças são:
BatchPeekMessage: Permite que os consumidores visualizem mensagens em lote. As informações retornadas não incluem umReceiptHandle.BatchReceiveMessage: Possibilita o consumo de mensagens de uma fila em lote pelos consumidores.