1.7.2 接收 Message

优质
小牛编辑
126浏览
2023-12-01

从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项为死信列队独有

  1. senderId:发送此条message的用户的developerId
  2. messageLength:messageBody的长度
  3. md5OfBody:messageBody的MD5校验和
  4. sendTimestamp:message到达EMQ server的时间戳
  5. receiveTimestamp:此次接收,message离开EMQ server的时间戳
  6. firstReceiveTimestamp:此message第一次接收时,message离开EMQ server的时间戳
  7. receiveCount:标识此message一共被接收到的次数,包含本次接收。如果此值经常大于0,且非用户刻意,则应考虑加大invisibilitySeconds
  8. sourceQueueName:源Queue的名称
  9. sourceTag:消息在源Queue中被以该Tag接收后,达到重新驱动的条件死亡
  10. deadTimestamp:消息在源Queue中被宣布死亡(不会再从源Queue中被相应的Tag接收)的时间
  11. originalMessageID:消息原始的MessageID,即在源Queue中的MessageID
  12. originalReceiveCount:消息在原始的Queue中被receive过的次数
  13. topic:即Message的topic属性,详见TopicQueue
  14. priority: 消息的优先级,详见PriorityQueue
messageAttributes : Map< String, MessageAttribute >

sendMessage时附带的用户自定义属性,具体含义可参见sendMessage()