Solucionar problemas de mensagens não retornadas para uma chamada de API ReceiveMessage do Amazon SQS
Os tópicos a seguir abordam as causas mais comuns pelas quais uma mensagem do Amazon SQS pode não ser retornada aos consumidores e como solucioná-las. Consulte mais informações em Why can’t I receive messages from my Amazon SQS queue?
Fila vazia
Para determinar se uma fila está vazia, use a sondagem longa para chamar a API ReceiveMessage. Você também pode usar as métricas ApproximateNumberOfMessagesVisible, ApproximateNumberOfMessagesNotVisible e ApproximateNumberOfMessagesDelayed do CloudWatch. Se todos os valores de métricas são definidos como 0 por vários minutos, a fila é considerada vazia.
Limite de trânsito atingido
Se você usar a sondagem longa e se o limite de trânsito da fila (por padrão, 120 mil) for atingido, o Amazon SQS não retornará mensagens de erro que excedam os limites da cota.
Atraso de mensagens
Se a fila do Amazon SQS estiver configurada como uma fila de atraso ou se as mensagens tiverem sido enviadas com temporizadores de mensagens, as mensagens não ficarão visíveis até que o tempo de atraso termine. Para verificar se uma fila está configurada como fila de atraso, use o atributo DelaySeconds da API GetQueueAttributes ou confira no console de fila em Atraso de entrega. Verifique a métrica ApproximateNumberOfMessagesDelayed do CloudWatch para entender se alguma mensagem está atrasada.
A mensagem está em trânsito
Se um consumidor diferente tiver sondado a mensagem, ela ficará em trânsito ou invisível durante o período de tempo limite de visibilidade. As sondagens adicionais podem retornar um recibo vazio. Verifique a métrica ApproximateNumberOfMessagesVisible do CloudWatch para entender o número de mensagens que estão disponíveis para serem recebidas. No caso de filas FIFO, se uma mensagem com o ID do grupo de mensagens estiver em trânsito, nenhuma outra mensagem será retornada, a menos que você exclua a mensagem ou que ela se torne visível. Isso ocorre porque a ordem das mensagens é mantida no nível do grupo de mensagens em uma fila FIFO.
Método de sondagem
Se você estiver usando a sondagem curta, (WaitTimeSeconds é 0), o Amazon SQS obtém amostras de um subconjunto de seus servidores e retorna mensagens apenas desses servidores. Portanto, você pode não receber as mensagens, mesmo que elas estejam disponíveis para serem recebidas. As solicitações de sondagem subsequentes retornarão as mensagens.
Se você estiver usando uma sondagem longa, o Amazon SQS sondará todos os servidores e enviará uma resposta após coletar pelo menos uma mensagem disponível e até o número máximo especificado. Se o valor de WaitTimeSeconds de ReceiveMessage for muito baixo, talvez você não receba todas as mensagens disponíveis.