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