Lógica de entrega de filas FIFO no Amazon SQS - Amazon Simple Queue Service

Lógica de entrega de filas FIFO no Amazon SQS

Os conceitos a seguir podem ajudar a entender melhor o envio e o recebimento de mensagens por FIFO.

Enviar mensagens

Se várias mensagens forem enviadas em sucessão a uma fila FIFO, cada uma com um ID de eliminação de duplicação de mensagem distinto, o Amazon SQS armazenará as mensagens e confirmará a transmissão. Em seguida, cada mensagem pode ser recebida e processada na ordem exata em que as mensagens foram transmitidas.

Em filas FIFO, as mensagens são ordenadas com base no ID de grupo de mensagens. Se vários hosts (ou threads diferentes no mesmo host) enviarem mensagens com o mesmo ID de grupo de mensagens para uma fila FIFO, o Amazon SQS armazenará as mensagens na ordem de chegada para processamento. Para garantir que o Amazon SQS preserve a ordem na qual as mensagens são enviadas e recebidas, cada produtor deve usar um ID de grupo de mensagens exclusivo para enviar todas as suas próprias mensagens.

A lógica da fila FIFO aplica-se apenas para cada ID de grupo de mensagens. Cada ID de grupo de mensagens representa um grupo de mensagens ordenadas distinto em uma fila do Amazon SQS. Para cada ID de grupo de mensagens, todas as mensagens são enviadas e recebidas na ordem estrita. No entanto, as mensagens com valores de ID de grupo de mensagens diferentes podem ser enviadas e recebidas fora de ordem. Você deve associar um ID de grupo de mensagens a uma mensagem. Se você não fornecer um ID de grupo de mensagens, a ação resultará em falha. Se você precisar de um único grupo de mensagens ordenadas, forneça o mesmo ID de grupo de mensagens para as mensagens enviadas para a fila FIFO.

Recebimento de mensagens

Você não pode solicitar o recebimento de mensagens com um ID de grupo de mensagens específico.

Ao receber mensagens de uma fila FIFO com vários IDs de grupo de mensagens, o Amazon SQS primeiro tenta retornar o máximo possível de mensagens com o mesmo ID de grupo de mensagens. Isso permite que outros clientes processem mensagens com um ID de grupo de mensagens diferente. Quando você recebe uma mensagem com um ID de grupo de mensagens, nenhuma outra mensagem para o mesmo ID de grupo de mensagens são retornadas, a menos que você exclua a mensagem ou ela se torne visível.

nota

É possível receber até 10 mensagens em uma única chamada usando o parâmetro de solicitação MaxNumberOfMessages da ReceiveMessage ação de Essas mensagens retêm a ordem de FIFO e podem ter o mesmo ID de grupo de mensagens. Assim, se houver menos de 10 mensagens disponíveis com o mesmo ID de grupo de mensagens, você poderá receber mensagens de outro ID de grupo de mensagens, no mesmo lote de 10 mensagens, mas ainda na ordem de FIFO.

Repetir várias vezes

As filas FIFO permitem várias tentativas ao produtor ou ao consumidor:

  • Se o produtor detectar uma falha de ação SendMessage, ele poderá tentar enviá-la novamente quantas vezes for necessário, usando o mesmo ID de eliminação de duplicação de mensagens. Supondo que o produtor receba pelo menos uma confirmação antes que o intervalo de eliminação de duplicação expire, as várias tentativas não afetarão a ordenação das mensagens nem introduzirão duplicatas.

  • Se o consumidor detectar uma falha de ação ReceiveMessage, ele poderá tentar enviá-la novamente quantas vezes for necessário, usando o mesmo ID de tentativa de solicitação de recebimento. Supondo que o consumidor receba pelo menos uma confirmação antes do tempo limite de visibilidade expirar, as várias tentativas não afetarão a ordenação das mensagens.

  • Quando você recebe uma mensagem com um ID de grupo de mensagens, nenhuma outra mensagem para o mesmo ID de grupo de mensagens são retornadas, a menos que você exclua a mensagem ou ela se torne visível.