本文介紹了當MNS刪除消息時返回“message not exist”的問題描述、問題原因和解決方案。
問題描述
消息服務MNS中刪除消息時報如下錯誤。
message not exist
問題原因
VisibilityTimeout
到期,該消息的ReceiptHandle失效,導致消息刪除失敗。詳細過程如下:
- 當消息被消費端接收,消息狀態從active變為inactive。
- inactive狀態將持續
VisibilityTimeout
的時間。在這段時間里,用戶可以刪除這條消息。 VisibilityTimeout
到期后,消息狀態將從inactive變回為active,消息可繼續被其他消費端消費,該消息的 ReceiptHandle隨之失效。- 如果使用已經失效的ReceiptHandle去刪除消息,系統將返回“message not exist”的錯誤。
解決方案
檢查隊列屬性VisibilityTimeout
的大小,設置一個合適的值,下次接收到消息時,再刪除消息。關于該參數大小的調整,請注意如下兩點:
- 如果
VisibilityTimeout
設置得太小,當來不及刪除消息時,會導致“message not exist”錯誤。 - 如果
VisibilityTimeout
設置得太大,當消息處理失敗時,將不能在短時間內再次處理該條消息。