消息服务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不保证消息顺序。

    如果您要求消息顺序必须先进先出,需要在应用层面解决,请参见严格保序队列