开发者社区 问答 正文

API的消费消息是多少?



基本信息

NameValue
[backcolor=transparent]APIReceiveMessage
[backcolor=transparent]RAM授权操作mns:ReceiveMessage
[backcolor=transparent]资源acs:mns:$region:$accountid:/queues/$queueName/messages


描述


该接口用于消费者消费队列中的消息,ReceiveMessage 操作会将取得的消息状态变成 Inactive,Inactive 的时间长度由 Queue 属性 VisibilityTimeout 指定(详见CreateQueue接口)。消费者在 VisibilityTimeout 时间内消费成功后需要调用 DeleteMessage 接口删除该消息,否则该消息将会重新变成为 Active 状态,此消息又可被消费者重新消费。


Request


Request的构造主要由以下几个部分组成:

  • 请求行

    GET /queues/$queueName/messages?waitseconds=10 HTTP/1.1

  • 特有URI参数
参数名称说明选项
waitseconds本次 ReceiveMessage 请求最长的Polling等待时间①,单位为秒可选

[backcolor=transparent]说明:

① [backcolor=transparent]如果 ReceiveMessage 请求附带 waitseconds 参数,在 Queue 无消息时,此次 ReceiveMessage 请求进入到Polling状态(即长轮询),等待的时长为waitseconds,在这段时间中,如果Queue 有消息写入会返回给用户;如果未设置 waitseconds ,则默认使用所属 Queue 的 PollingWaitSeconds 属性(参见 CreateQueue 接口)。
② [backcolor=transparent]当进入到长轮询之后,建议您降低长轮询的并发数。 目前MNS服务端会根据用户的长轮询数量、长轮询等待时间、访问IP数量等多个因素动态设置长轮询防攻击并发上限值;当队列无消息时超过长轮询上限值的请求将无法进入到监听状态并直接返回404MessageNotExist(按请求量正常计费)。如果您有临时提升长轮询上限值的需求,请及时提工单联系我们,避免产生不必要的费用支出。

  • 特有Request Header

    无,请参考 [backcolor=transparent]调用方式/公共参数

  • Request Body



Response


返回消息由返回状态行,HTTP头和消息体三部分组成。

  • HTTP Status Code

    HTTP/1.1 200 OK

  • 特有Response Header

    无,请参考 [backcolor=transparent]调用方式/公共参数

  • Response Body

    返回的结果为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消息的优先级权值


Special Error

错误代码错误消息状态码
QueueNotExistThe queue name you provided is not exist.404
MessageNotExistMessage not exist.404

[backcolor=transparent]请求示例:
[backcolor=transparent]

展开
收起
轩墨 2017-10-24 15:31:18 2098 分享 版权
阿里云 AI 助理回答

阿里云的MNS(Message Service)是消息队列服务,用于实现应用解耦、异步处理和流量削峰填谷等场景。您提到的是通过API接口ReceiveMessage来从队列中消费消息的过程。下面是对您提供信息的一个总结和补充说明:

API调用概述

  • 操作名称ReceiveMessage
  • 功能:消费者使用此接口从指定的队列中获取消息。
  • 权限需求:需要为调用者分配mns:ReceiveMessage权限。
  • 资源定位:格式为acs:mns:$region:$accountid:/queues/$queueName/messages,其中$region是阿里云区域,$accountid是阿里云账号ID,$queueName是队列的名称。

请求参数

  • waitseconds:可选参数,表示本次请求最长等待时间(轮询时间),单位为秒。如果队列当前没有消息,请求会在这个时间内等待新消息的到来。不设置时,默认使用队列创建时设定的PollingWaitSeconds属性值。

请求构造

  • 方法:GET
  • URL示例/queues/$queueName/messages?waitseconds=10
  • Header:遵循阿里云通用的HTTP请求头规范,无需特定额外头部。
  • Body:无

响应结构

  • 状态码:成功时为200 OK。
  • 响应体:XML格式,包含消息详情如MessageIdReceiptHandleMessageBody等。

错误代码

  • QueueNotExist:队列不存在,状态码404。
  • MessageNotExist:队列中没有消息可供消费,状态码404。

注意事项

  • 消费者获取消息后,消息状态变为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$accessKeyIdnonce和计算得到的$signature等变量值,并确保遵循阿里云MNS的签名规则生成正确的签名字符串。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答