轻量消息队列(原 MNS)提供了批量发送和批量接收消息的接口,既大大提升了QPS,又降低了请求次数,节省了费用。
批量发送消息
BatchSendMessage
一次最多发送16条消息,所有消息的大小加起来,总和不能超过64 KB。
如果您不指定,那么默认消息会做Base64编码(会放大原始消息体),所以实际发送的消息大小不要超过47 KB。
您也可以指定不使用Base64编码,使用原始消息体:
message.setMessageBody("message_body", Message.MessageBodyType.RAW_STRING);
如果消息超过64 KB,请参见超大消息传输。
批量接收消息
BatchReceiveMessage
一次最多获取16条消息,有时候明明有10条消息,一次BatchReceiveMessage
却只能获取5条消息。
例如:在一个队列里顺序发送了10条消息 ( m1, m2, m3, m4, m5, m6, m7, m8, m9, m10),第一次调用BatchReceiveMessage
时,接收了5条消息 (m2, m4, m6, m8, m10) ,第二次调用BatchReceiveMessage
,接收了余下的5条消息 (m1, m3, m5, m7, m9) 。
轻量消息队列(原 MNS)是分多个”切片“存放数据的,批量的操作每次只会到一个“切片”上获取数据,接收到数据后立刻返回,不会等到获取到所有“切片”的数据后才返回。所以数据发送时在“切片”的分配情况就决定了每次批量获取时返回的消息有哪些。所以轻量消息队列(原 MNS)不保证消息顺序。
如果您要求消息顺序必须先进先出,需要在应用层面解决,请参见严格保序队列。