开发者社区 问答 正文

API如何发送消息?



基本信息

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


描述


该接口用于发送消息到指定的队列,普通消息发送到队列随即可被消费者消费。但是如果生产者发送一个消息不想马上被消费者消费(典型的使用场景为定期任务),生产者在发送消息时设置 DelaySeconds 参数就可以达到此目的。发送带 DelaySeconds 参数值大于0的消息初始状态为 Delayed,此时消息不能被消费者消费,只有等 DelaySeconds 时间后消息变成 Active 状态后才可消费。

[backcolor=transparent]Tip:
发送消息时指定 DelaySeconds 参数的优先级高于延时队列的 DelaySeconds 属性,即两个 DelaySeconds 属性设置的值不同时以发送消息时指定的值为准。

Request


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

  • 请求行

    POST /queues/$queueName/messages HTTP/1.1

  • 特有Request Header

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

  • Request Body

    Request Body为XML格式,其中包含创建Message的属性。
参数名称说明参数值选项
MessageBody消息正文UTF-8字符集Required
DelaySecondsDelaySeconds 指定的秒数延后可被消费,单位为秒0-604800秒(7天)范围内某个整数值,默认值为0Optional
Priority指定消息的优先级权值,优先级越高的消息,越容易更早被消费取值范围1~16(其中1为最高优先级),默认优先级为8Optional


Response


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

  • HTTP Status Code

    HTTP/1.1 201 Created

  • 特有Response Header

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

  • Response Body

    返回的结果为XML格式,返回 Message 的 MessageId 和 MessageBodyMD5 子元素。
参数名称说明
MessageId消息编号,在一个队列唯一
MessageBodyMD5消息正文的MD5值
ReceiptHandle发送延迟消息后返回的消息句柄


Special Error

错误代码错误消息状态码
QueueNotExistThe queue name you provided is not exist.404
MalformedXMLThe XML you provided was not well-formed.400
[tr=rgb(239, 251, 255)][td]InvalidArgument The value of Element should between Low and High seconds/bytes.400
[backcolor=transparent]请求示例:
[backcolor=transparent]

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

阿里云的MNS(Message Service)提供了发送消息到指定队列的功能,允许用户控制消息的消费时机,比如通过设置DelaySeconds参数来延后消息被消费者处理的时间。下面是对您提供信息的一个总结和补充说明:

基本操作描述

  • 接口功能:此接口用于向指定的MNS队列发送消息。消息可以立即被消费,或者通过设置DelaySeconds参数实现延时消费。
  • 延时消费:当生产者希望消息在一段时间后再被消费时,可以在发送消息时设置DelaySeconds参数,单位为秒,有效范围是0至604800秒(即7天)。默认情况下,如果不设置或设置为0,则消息发送后立即可被消费。
  • 优先级设定:还可以为消息指定优先级(Priority),取值1至16,其中1表示最高优先级,这有助于控制消息的消费顺序。

请求构造

  • HTTP Method:使用POST方法。
  • URL路径/queues/$queueName/messages,其中$queueName需要替换为实际的队列名称。
  • Request Headers:遵循阿里云API调用的公共参数规范,无特定于该接口的Header。
  • Request Body:XML格式,包含至少MessageBody字段,以及可选的DelaySecondsPriority字段。

响应结构

  • HTTP Status Code:成功创建消息时返回201 Created。
  • Response Body:XML格式,包含消息的唯一标识MessageId、消息正文的MD5摘要MessageBodyMD5,如果是延迟消息还会返回ReceiptHandle

特殊错误

  • QueueNotExist:请求中指定的队列不存在,状态码404。
  • MalformedXML:提交的XML格式不正确,状态码400。
  • InvalidArgument:元素值不在允许的范围内,例如DelaySeconds超出0到604800的范围,状态码400。

示例请求

虽然示例请求的具体内容未给出,但一个基本的请求示例可能如下所示(XML Body部分):

<SendMessageRequest>
    <MessageBody>您的消息内容</MessageBody>
    <DelaySeconds>3600</DelaySeconds> <!-- 延迟1小时 -->
    <Priority>5</Priority> <!-- 优先级设置为5 -->
</SendMessageRequest>

请确保在实际应用中,将上述XML内容填充到POST请求的Body中,并且根据实际情况调整队列名、消息内容、延迟时间及优先级等参数。

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