问题描述
消息服务MNS中删除消息时报如下错误。
message not exist
问题原因
VisibilityTimeout
到期,该消息的ReceiptHandle失效,导致消息删除失败。详细过程如下:
- 当消息被消费端接收,消息状态从
active
变为inactive
。 inactive
状态将持续VisibilityTimeout
的时间。在这段时间里,用户可以删除这条消息。VisibilityTimeout
到期后,消息状态将从inactive
变回为active
,消息可继续被其他消费端消费,该消息的ReceiptHandle
随之失效。- 如果使用已经失效的
ReceiptHandle
去删除消息,系统将返回message not exist
的错误。
解决方案
检查队列属性VisibilityTimeout
的大小,设置一个合适的值,下次接收到消息时,再删除消息。关于该参数大小的调整,请注意如下两点:
- 如果
VisibilityTimeout
设置得太小,当来不及删除消息时,会导致message not exist
错误。 - 如果
VisibilityTimeout
设置得太大,当消息处理失败时,将不能在短时间内再次处理该条消息。
适用于
- 消息服务MNS