本文介紹當調用BatchSendMessage
介面時,返回的訊息數少於隊列中可見訊息數的原因。
Simple Message Queue (formerly MNS)的佇列服務為Serverless形態,實際對應多個計算和儲存節點(具體的數量會根據該地區的總體流量和訊息量水位而調整,可能有幾十個至幾百個節點不等)。連續的訊息可能會儲存在不同的節點上,例如Message 1可能儲存到節點1上,而Message 2可能儲存到節點2上。
使用BatchReceiveMessage
介面擷取訊息時,會先負載平衡選擇一個儲存節點,嘗試批量擷取最多n條訊息,若擷取到則直接返回給您。若擷取不到則繼續負載平衡選擇另一個儲存節點嘗試擷取訊息。這種快速返回的設計是為了保證介面的效能。只要BatchReceiveMessage持續地被調用,就總能把訊息消費掉。
例如,隊列中有11條訊息,您調用一次BatchReceiveMessage
介面希望批量讀取最多15條訊息。但當11條訊息實際對應多個儲存節點時,BatchReceiveMessage
介面的邏輯是找到任意一個儲存有訊息的節點快速返回,可能少於11條。