1.7.2 接收 Message
从Queue中接收message
方法参数ReceiveMessageRequest
queueName : String : required
tagName : String : optional
指定接收请求对应的Tag 如果此值未设置,即从Queue的默认Tag接收
maxReceiveMessageNumber : int : optional
接收到的message的最大数量
当Queue中有message可读时,请求会立即返回。因此实际收到的message的数量总是小于等于此数值
如果在请求中未设置此参数,将使用Queue的参数
Queue中默认值:100
合法范围: [1, 100]
maxReceiveMessageWaitSeconds : int : optional
详见createQueue()
如果在请求中未设置此参数,将使用Queue的参数
Queue中默认值:0
合法范围: [0, 20]
attributeName : String : optional
attributeValue : MessageAttribute : optional
attributeName与attributeValue配合使用,可以在接收message时按message附带的自定义属性进行过滤(message的自定义属性在sendMessage()
时定义)
如果没有设定这两个参数,表示接收全部message
如果指定attributeName的同时,将attributeValue中的字段type设为"empty",表示接收所有包含attributeName(大小写敏感)属性的message
否则,只有那些attributeName,attributeValue.type,attributeValue.value同时匹配的message才会被接收
(MessageAttribute类型的具体字段请参见sendMessage()
)
注: 用户在createTag()
时也可类似地指定过滤条件。二者的区别请参见FAQ。
方法返回List< ReceiveMessageResponse >
返回的message列表。其中ReceiveMessageResponse具体包括:
messageID : String
message标识符,与sendMessage的返回值相对应
receiptHandle : String
接收句柄,用以改变收到的message的不可见时间或删除message
接收到的message在使用后未即时删除,将重新变为可读并被再次接收。此时,两次接收到的messageID相同,但receiptHandle不同
messageBody : String
消息体
attributes : Map< String, String >
message的meta属性,包含以下内容中的某些项
注 8~12项为死信列队独有
- senderId:发送此条message的用户的developerId
- messageLength:messageBody的长度
- md5OfBody:messageBody的MD5校验和
- sendTimestamp:message到达EMQ server的时间戳
- receiveTimestamp:此次接收,message离开EMQ server的时间戳
- firstReceiveTimestamp:此message第一次接收时,message离开EMQ server的时间戳
- receiveCount:标识此message一共被接收到的次数,包含本次接收。如果此值经常大于0,且非用户刻意,则应考虑加大invisibilitySeconds
- sourceQueueName:源Queue的名称
- sourceTag:消息在源Queue中被以该Tag接收后,达到重新驱动的条件死亡
- deadTimestamp:消息在源Queue中被宣布死亡(不会再从源Queue中被相应的Tag接收)的时间
- originalMessageID:消息原始的MessageID,即在源Queue中的MessageID
- originalReceiveCount:消息在原始的Queue中被receive过的次数
- topic:即Message的topic属性,详见TopicQueue
- priority: 消息的优先级,详见PriorityQueue
messageAttributes : Map< String, MessageAttribute >
sendMessage时附带的用户自定义属性,具体含义可参见sendMessage()