Por que minha fila do Amazon SQS FIFO não retorna todas as mensagens ou mensagens em outros grupos de mensagens?

Data da última atualização: 26/08/2021

Minha fila do Amazon Simple Queue Service (Amazon SQS) First-In-First-Out (FIFO) não retorna algumas mensagens quando eu chamo a API ReceiveMessage. Por que minha fila SQS FIFO não retorna todas as mensagens de um ID de grupo de mensagens específico ou de outros grupos de mensagens?

Resolução

Para filas FIFO, você não pode solicitar o recebimento de mensagens de um ID de grupo de mensagens específico. Quando você especifica um parâmetro MaxNumberOfMessages na chamada de API ReceiveMessage, o SQS retorna tantas mensagens com o mesmo ID de grupo de mensagens quanto possível. Outros consumidores ou outras chamadas ReceiveMessage podem então processar mensagens com um ID de grupo de mensagens diferente.

Para filas FIFO, quando você receber uma mensagem pertencente a um ID de grupo de mensagens específico, observe o seguinte:

  • Você deve excluir ou mover mensagens na chamada de recebimento atual antes de receber mais mensagens do mesmo ID de grupo.
    Observação: as mensagens devem ser movidas do estado disponível ingresso.
  • Você não pode receber mensagens em outros grupos de mensagens.

Uma fila FIFO examina as primeiras 20.000 mensagens para determinar o grupo de mensagens disponível. Se todos os grupos de mensagens nas primeiras 20.000 mensagens forem bloqueados devido a mensagens de ingresso, as mensagens de outros grupos além das primeiras 20.000 não retornarão. Para obter mais informações, consulte Evitar uma grande lista de atraso de mensagens com o mesmo ID de grupo.

Exemplo

Uma fila FIFO tem um total de 20.001 mensagens. As primeiras 20.000 mensagens pertencem ao grupo de mensagens 1 e a última mensagem pertence ao grupo de mensagens 2. Quando você tenta receber mensagens da fila, você recebe uma mensagem somente do grupo 1. Todas as chamadas consecutivas ReceiveMessage resultam em recebimentos vazios. Isso acontece porque o FIFO examina apenas as mensagens que pertencem ao grupo 1 e esse grupo é bloqueado pela chamada atual.

Exemplo B

Uma fila FIFO tem um total de 20.000 mensagens. As primeiras 19.999 mensagens pertencem ao grupo de mensagens 1 e a última mensagem pertence ao grupo de mensagens 2. Quando você tenta receber mensagens da fila, a primeira chamada ReceiveMessage recebe uma mensagem pertencente ao grupo 1. A segunda chamada ReceiveMessage recebe uma mensagem pertencente ao grupo 2. Quaisquer chamadas adicionais do ReceiveMessage resultam em recebimentos vazios, já que ambos os grupos agora estão bloqueados pelas chamadas atuais.


Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?