基本信息
Name | Value |
[backcolor=transparent]API | ReceiveMessage |
[backcolor=transparent]RAM授权操作 | mns:ReceiveMessage |
[backcolor=transparent]资源 | acs:mns:$region:$accountid:/queues/$queueName/messages |
该接口用于消费者消费队列中的消息,ReceiveMessage 操作会将取得的消息状态变成 Inactive,Inactive 的时间长度由 Queue 属性 VisibilityTimeout 指定(详见CreateQueue接口)。消费者在 VisibilityTimeout 时间内消费成功后需要调用 DeleteMessage 接口删除该消息,否则该消息将会重新变成为 Active 状态,此消息又可被消费者重新消费。
GET /queues/$queueName/messages?waitseconds=10 HTTP/1.1
参数名称 | 说明 | 选项 |
waitseconds | 本次 ReceiveMessage 请求最长的Polling等待时间①,单位为秒 | 可选 |
① [backcolor=transparent]如果 ReceiveMessage 请求附带 waitseconds 参数,在 Queue 无消息时,此次 ReceiveMessage 请求进入到Polling状态(即长轮询),等待的时长为waitseconds,在这段时间中,如果Queue 有消息写入会返回给用户;如果未设置 waitseconds ,则默认使用所属 Queue 的 PollingWaitSeconds 属性(参见 CreateQueue 接口)。
② [backcolor=transparent]当进入到长轮询之后,建议您降低长轮询的并发数。 目前MNS服务端会根据用户的长轮询数量、长轮询等待时间、访问IP数量等多个因素动态设置长轮询防攻击并发上限值;当队列无消息时超过长轮询上限值的请求将无法进入到监听状态并直接返回404MessageNotExist(按请求量正常计费)。如果您有临时提升长轮询上限值的需求,请及时提工单联系我们,避免产生不必要的费用支出。
无,请参考 [backcolor=transparent]调用方式/公共参数
无
HTTP/1.1 200 OK
无,请参考 [backcolor=transparent]调用方式/公共参数
返回的结果为XML格式,返回Message消息正文及消息属性。
参数名称 | 说明 |
MessageId | 消息编号,在一个 Queue 中唯一 |
ReceiptHandle | 本次获取消息产生的临时句柄,用于删除和修改处于 Inactive 消息,NextVisibleTime 之前有效。 |
MessageBody | 消息正文 |
MessageBodyMD5 | 消息正文的 MD5 值 |
EnqueueTime | 消息发送到队列的时间,从 1970年1月1日 00:00:00 000 开始的毫秒数 |
NextVisibleTime | 下次可被再次消费的时间,从1970年1月1日 00:00:00 000 开始的毫秒数 |
FirstDequeueTime | 第一次被消费的时间,从1970年1月1日 00:00:00 000 开始的毫秒数 |
DequeueCount | 总共被消费的次数 |
Priority | 消息的优先级权值 |
错误代码 | 错误消息 | 状态码 |
QueueNotExist | The queue name you provided is not exist. | 404 |
MessageNotExist | Message not exist. | 404 |
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
阿里云的MNS(Message Service)是消息队列服务,用于实现应用解耦、异步处理和流量削峰填谷等场景。您提到的是通过API接口ReceiveMessage
来从队列中消费消息的过程。下面是对您提供信息的一个总结和补充说明:
ReceiveMessage
mns:ReceiveMessage
权限。acs:mns:$region:$accountid:/queues/$queueName/messages
,其中$region
是阿里云区域,$accountid
是阿里云账号ID,$queueName
是队列的名称。PollingWaitSeconds
属性值。/queues/$queueName/messages?waitseconds=10
MessageId
、ReceiptHandle
、MessageBody
等。Inactive
,需在VisibilityTimeout
时间内完成处理并调用DeleteMessage
删除消息,否则消息将重新变为可消费状态。虽然您提到了“请求示例”,但具体示例未给出。一个典型的ReceiveMessage
请求示例(假设已登录阿里云控制台或使用SDK)可能是通过cURL命令或编程语言中的HTTP客户端库发起的,形式如下:
curl -X GET "https://mns.$region.aliyuncs.com/?Action=ReceiveMessage&Version=2015-06-06&QueueName=$queueName&RegionId=$region&AcsAccessKeyId=$accessKeyId&SignatureMethod=HMAC-SHA1&SignatureNonce=nonce&SignatureVersion=1.0&Timestamp=$(date -u +%Y-%m-%dT%H:%M:%SZ)&WaitSeconds=10&Signature=$signature"
请注意,上述cURL命令仅为示意,实际使用时需要替换$region
、$queueName
、$accessKeyId
、nonce
和计算得到的$signature
等变量值,并确保遵循阿里云MNS的签名规则生成正确的签名字符串。