BatchSendMessage返回的消息條數(shù)為什么少于隊(duì)列中的可見(jiàn)消息數(shù)?
本文介紹當(dāng)調(diào)用BatchSendMessage
接口時(shí),返回的消息數(shù)少于隊(duì)列中可見(jiàn)消息數(shù)的原因。
輕量消息隊(duì)列(原 MNS)的隊(duì)列服務(wù)為Serverless形態(tài),實(shí)際對(duì)應(yīng)多個(gè)計(jì)算和存儲(chǔ)節(jié)點(diǎn)(具體的數(shù)量會(huì)根據(jù)該地域的總體流量和消息量水位而調(diào)整,可能有幾十個(gè)至幾百個(gè)節(jié)點(diǎn)不等)。連續(xù)的消息可能會(huì)存儲(chǔ)在不同的節(jié)點(diǎn)上,例如Message 1可能存儲(chǔ)到節(jié)點(diǎn)1上,而Message 2可能存儲(chǔ)到節(jié)點(diǎn)2上。
使用BatchReceiveMessage
接口獲取消息時(shí),會(huì)先負(fù)載均衡選擇一個(gè)存儲(chǔ)節(jié)點(diǎn),嘗試批量獲取最多n條消息,若獲取到則直接返回給您。若獲取不到則繼續(xù)負(fù)載均衡選擇另一個(gè)存儲(chǔ)節(jié)點(diǎn)嘗試獲取消息。這種快速返回的設(shè)計(jì)是為了保證接口的性能。只要BatchReceiveMessage持續(xù)地被調(diào)用,就總能把消息消費(fèi)掉。
例如,隊(duì)列中有11條消息,您調(diào)用一次BatchReceiveMessage
接口希望批量讀取最多15條消息。但當(dāng)11條消息實(shí)際對(duì)應(yīng)多個(gè)存儲(chǔ)節(jié)點(diǎn)時(shí),BatchReceiveMessage
接口的邏輯是找到任意一個(gè)存儲(chǔ)有消息的節(jié)點(diǎn)快速返回,可能少于11條。