Como solucionar os erros "ReceiptHandleIsInvalid" e "InvalidParameterValue" ao usar a chamada de API DeleteMessage do Amazon SQS?

3 minuto de leitura
0

Eu recebo um erro "ReceiptHandleIsInvalid" ou "InvalidParameterValue" quando tento excluir mensagens de uma fila do Amazon Simple Queue Service (Amazon SQS).

Breve descrição

Ao receber uma mensagem de uma fila do Amazon SQS, você também recebe um identificador de recebimento dessa mensagem para as filas padrão e FIFO (primeiro a entrar, primeiro a sair). O identificador de recebimento é necessário ao excluir ou alterar a visibilidade de mensagens.

Se o identificador de recebimento estiver incorreto, você receberá um erro semelhante a este exemplo:

"An error occurred (ReceiptHandleIsInvalid) when calling the DeleteMessage operation: The input receipt handle 'YOUR RECEIPT HANDLE' is not a valid receipt handle."

Se o identificador de recebimento estiver expirado, você receberá um erro semelhante a este exemplo:

"An error occurred (InvalidParameterValue) when calling the DeleteMessage operation: Value 'YOUR RECEIPT HANDLE' for parameter ReceiptHandle is invalid. Reason: The receipt handle has expired."

Um identificador de recebimento expira após o tempo limite de visibilidade. Quando o tempo limite de visibilidade expira, a mensagem retorna à fila. Ao receber a mensagem novamente de um consumidor, você recebe um novo identificador de recebimento. Esse erro ocorre porque você usou um identificador de recebimento mais antigo em vez do identificador de recebimento mais recente.

Observação: os identificadores de recebimento mais antigos podem obter êxito quando você usa filas padrão do SQS. No entanto, é uma prática recomendada usar o identificador de recebimento mais recente para chamadas de API DeleteMessage.

Resolução

Para evitar receber erros por identificador de recebimento incorreto ou expirado, use o identificador de recebimento correto para excluir a mensagem dentro do tempo limite de visibilidade da fila do SQS.

Caso receba uma mensagem mais de uma vez, analise a resposta da chamada de API ReceiveMessage mais recente e identifique o valor de ReceiptHandle. Em seguida, use o valor identificado de ReceiptHandle quando for chamar a API DeleteMessage.

Além disso, você pode receber esse erro ao fazer a chamada de API DeleteMessage:

"An error occurred (ReceiptHandleIsInvalid) when calling the DeleteMessage operation: The receipt handle "YOUR RECEIPT HANDLE" is not valid for this queue."

Esse erro ocorre quando você tenta excluir uma mensagem com um identificador de recebimento de uma fila diferente do SQS. Para evitar esse erro, use o identificador de recebimento correto da fila do SQS em que a mensagem está.

Informações relacionadas

Práticas recomendadas do Amazon SQS

AWS OFICIAL
AWS OFICIALAtualizada há 4 meses