本文介绍当调用BatchSendMessage
接口时,返回的消息数少于队列中可见消息数的原因。
轻量消息队列(原 MNS)的队列服务为Serverless形态,实际对应多个计算和存储节点(具体的数量会根据该地域的总体流量和消息量水位而调整,可能有几十个至几百个节点不等)。连续的消息可能会存储在不同的节点上,例如Message 1可能存储到节点1上,而Message 2可能存储到节点2上。
使用BatchReceiveMessage
接口获取消息时,会先负载均衡选择一个存储节点,尝试批量获取最多n条消息,若获取到则直接返回给您。若获取不到则继续负载均衡选择另一个存储节点尝试获取消息。这种快速返回的设计是为了保证接口的性能。只要BatchReceiveMessage持续地被调用,就总能把消息消费掉。
例如,队列中有11条消息,您调用一次BatchReceiveMessage
接口希望批量读取最多15条消息。但当11条消息实际对应多个存储节点时,BatchReceiveMessage
接口的逻辑是找到任意一个存储有消息的节点快速返回,可能少于11条。