BatchSendMessage返回的消息条数为什么少于队列中的可见消息数?

本文介绍当调用BatchSendMessage接口时,返回的消息数少于队列中可见消息数的原因。

轻量消息队列(原 MNS)的队列服务为Serverless形态,实际对应多个计算和存储节点(具体的数量会根据该地域的总体流量和消息量水位而调整,可能有几十个至几百个节点不等)。连续的消息可能会存储在不同的节点上,例如Message 1可能存储到节点1上,而Message 2可能存储到节点2上。

使用BatchReceiveMessage接口获取消息时,会先负载均衡选择一个存储节点,尝试批量获取最多n条消息,若获取到则直接返回给您。若获取不到则继续负载均衡选择另一个存储节点尝试获取消息。这种快速返回的设计是为了保证接口的性能。只要BatchReceiveMessage持续地被调用,就总能把消息消费掉

例如,队列中有11条消息,您调用一次BatchReceiveMessage接口希望批量读取最多15条消息。但当11条消息实际对应多个存储节点时,BatchReceiveMessage接口的逻辑是找到任意一个存储有消息的节点快速返回,可能少于11条。