当我使用 Amazon SQS DeleteMessage API 调用时,如何排除“ReceiptHandleIsInvalid”或“InvalidParameterValue”错误?

1 分钟阅读
0

当我尝试从 Amazon Simple Queue Service(Amazon SQS)队列中删除消息时,我收到“ReceiptHandleIsInvalid”或“InvalidParameterValue”错误。

简述

当您收到一条来自 Amazon SQS 队列的消息时,您还会收到该消息的 FIFO(先进先出)和标准队列的接收句柄。删除消息或更改消息的可见性时,需要使用这个接收句柄。

如果接收句柄不正确,则您会收到与以下示例类似的错误:

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

如果接收句柄已过期,则您会收到与以下示例类似的错误:

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

消息可见性有一个超时期限,过了这个期限,接收句柄就会过期。当可见性超时期限到期后,消息将返回队列。当您再次收到来自消费者的消息时,您会收到一个新的接收句柄。之所以出现此错误,是因为您使用的是旧的接收句柄而不是最新的接收句柄。

**注意:**当您使用标准 SQS 队列时,使用旧的接收句柄可能也能完成操作。但是,最佳实践是使用最新的接收句柄执行 DeleteMessage API 调用。

解决方案

为防止出现错误或过期的接收句柄错误,请使用正确的接收句柄在 SQS 队列可见性超时期限内删除该消息。

如果您多次收到同一条消息,请查看最新的 ReceiveMessage API 调用的响应,并确定 ReceiptHandle 值。然后,在调用 DeleteMessage API 时使用已确定的 ReceiptHandle 值。

此外,当您执行 DeleteMessage API 调用时,您可能会收到以下错误:

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

当您尝试使用来自其他 SQS 队列的接收句柄来删除某条消息时,就会发生此错误。要防止出现此错误,请使用消息所在的 SQS 队列中的正确接收句柄进行操作。

相关信息

Best practices for Amazon SQS

AWS 官方
AWS 官方已更新 1 年前