全部產品
Search
文件中心

:BatchSendMessage返回的訊息條數為什麼少於隊列中的可見訊息數?

更新時間:Oct 23, 2024

本文介紹當調用BatchSendMessage介面時,返回的訊息數少於隊列中可見訊息數的原因。

Simple Message Queue (formerly MNS)的佇列服務為Serverless形態,實際對應多個計算和儲存節點(具體的數量會根據該地區的總體流量和訊息量水位而調整,可能有幾十個至幾百個節點不等)。連續的訊息可能會儲存在不同的節點上,例如Message 1可能儲存到節點1上,而Message 2可能儲存到節點2上。

使用BatchReceiveMessage介面擷取訊息時,會先負載平衡選擇一個儲存節點,嘗試批量擷取最多n條訊息,若擷取到則直接返回給您。若擷取不到則繼續負載平衡選擇另一個儲存節點嘗試擷取訊息。這種快速返回的設計是為了保證介面的效能。只要BatchReceiveMessage持續地被調用,就總能把訊息消費掉

例如,隊列中有11條訊息,您調用一次BatchReceiveMessage介面希望批量讀取最多15條訊息。但當11條訊息實際對應多個儲存節點時,BatchReceiveMessage介面的邏輯是找到任意一個儲存有訊息的節點快速返回,可能少於11條。