簡體   English   中英

在可見性超時之前,我得到相同的多個Sqs消息

[英]I'm getting same multiple Sqs message before visibility timeout

我設置可見時間超過12小時和最大消息3,延遲時間15分鍾,我得到sqs消息幾分鍾后我自動得到相同的消息。

為什么我在沒有超時的情況下獲得多個sqs消息? 在可見性超時后刪除隊列中的消息或再次發送sqs消息?

在Amazon SQS隊列上調用ReceiveMessage() ,將從隊列中檢索最多10條消息(可配置)。

這些消息將被標記為InvisibleIn-Flight 這意味着消息仍在隊列中,但不會通過另一個ReceiveMessage()調用返回。 消息將在一段時間內保持不可見 在隊列上配置默認時間段(“默認可見性超時”)或檢索消息時( VisibilityTimeout )。

當應用程序處理完一條消息后,它應調用DeleteMessage() ,並傳遞隨消息提供的MessageHandle 然后將從隊列中刪除該消息。

如果在刪除郵件之前隱身期限到期,它將再次置於隊列中 ,應用程序可以再次檢索它。 因此,請確保將不可見性超時設置為比應用程序正常處理消息所需的時間長。

可能的是,一個消息可被檢索一次以上從Amazon SQS。 這種情況很少見,但可能會發生多個進程同時檢索郵件的情況。 因此,SQS是“至少一次交付”。 如果這是一個問題,您可以使用FIFO隊列 (在每個區域中尚不可用),這將保證每條消息只傳送一次,但FIFO隊列存在吞吐量限制。

因此,如果您不止一次收到郵件:

  • 您應該檢查您的隱身超時設置(默認設置和調用ReceiveMessage()時可以傳遞的值)
  • 考慮使用FIFO隊列
  • 讓您的應用程序在再次處理之前檢查消息是否已被處理(例如,通過唯一ID

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM