我有一個FIFO SQS隊列,可見時間爲30秒。 需求是儘可能快地讀取消息並清除隊列。Amazon SQS - FIFO隊列消息請求,不一致接收
我有代碼在JAVA在以下所示的方式(這僅僅是一個想法的表示只,而不是完整的代碼):
//keep getting messages from FIFO and process them ASAP
while(true)
{
List<Message> messages =
sqsclient.receiveMessage(receiveMessageRequest).getMessages();
//my logic/code here to process these messages and delete them ASAP
}
在一旦消息被接收到的while循環中,他們被處理並從隊列中刪除。 但是,很多次 receiveMessageRequest不給我消息(返回零消息)。
此外,從SQS接收時,消息限制僅爲10次,這已經是一個問題,但由於這些零接收,隊列堆積如山。
我不知道爲什麼會發生這種情況。該部分的文檔完全不清楚(或者我是否缺少隊列配置?)
請幫忙!
注: 1.我的FIFO隊列總是具有在這種情況下的消息,所以沒有具有零消息和接收請求返回零
2.處理和刪除時間也隊列的情況下小於可見性超時。
謝謝。
更新: 我已經開始運行多個用戶來處理FIFO隊列。顯然,一個消費者沒有處理消息的流入。我將在幾天內更新多個消費者的表現。謝謝
您是否考慮過使用多個線程/客戶端來並行使用消息?您可能會達到FIFO隊列每秒300個事務(TPS)的限制嗎?您是否考慮過使用**長輪詢**(接收消息等待時間),它只會在指定的時間段(例如20秒)後返回零消息響應? –
@John感謝您的回覆。 是的。我已經嘗試了長時間投票,類似的行爲。即使隊列中有超過5000條消息,它並不總是讓我發送消息。 我現在正嘗試多個消費者。但我想大致瞭解行爲 –
目前有多少條消息顯示爲**正在飛行**?先進先出隊列要求您正確處理每封郵件,如果不正確,他們將顯示「正在運行」,並且 - 在設計上 - SQS會等待您對其採取行動或其可見性超時過期。檢查這個? –