你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

更新消息

Update Message操作更新消息的可见性超时。 也可以使用此操作更新消息的内容。 消息的格式必须包含在采用 UTF-8 编码的 XML 请求中,编码的消息大小最大为 64 KB。 此操作是在 Azure 队列存储 API 版本 2011-08-18 中引入的。

请求

可以按如下所示构造 Update Message 请求。 建议使用 HTTPS。 将 myaccount 替换为存储帐户的名称,将 myqueue 替换为队列的名称。

方法 请求 URI HTTP 版本
PUT https://myaccount.queue.core.windows.net/myqueue/messages/messageid?popreceipt=<string-value>&visibilitytimeout=<int-seconds> HTTP/1.1

模拟存储服务

SDK 1.6 及更高版本支持此操作。

对模拟存储服务发出请求时,将模拟器主机名和队列存储端口指定为 127.0.0.1:10001,后跟模拟的存储帐户名称。

方法 请求 URI HTTP 版本
PUT http://127.0.0.1:10001/devstoreaccount1/myqueue/messages/messageid?popreceipt=<string-value>&visibilitytimeout=<int-seconds> HTTP/1.1

URI 参数

可以在请求 URI 上指定以下参数。

参数 说明
popreceipt 必需。 指定先前调用 “获取消息” 或“ 更新消息 ”操作返回的有效 pop 回执值。 popreceipt必须是 URL 编码的。
visibilitytimeout 必需。 指定新的可见性超时值(秒),它相对于服务器时间。 新值必须大于或等于 0,并且不能大于 7 天。 消息的可见性超时不能设置为晚于到期时间的值。 可以更新消息,直到邮件被删除或过期。
timeout 可选。 timeout 参数以秒表示。 有关详细信息,请参阅 为队列存储操作设置超时

请求标头

下表介绍必需的和可选的请求标头。

请求标头 说明
Authorization 必需。 指定授权方案、帐户名称和签名。 有关详细信息,请参阅授权对 Azure 存储的请求
Date or x-ms-date 必需。 指定请求的协调世界时 (UTC)。 有关详细信息,请参阅授权对 Azure 存储的请求
x-ms-version 需要 2011-08-18 或更高版本。 指定用于此请求的操作的版本。 有关详细信息,请参阅 Azure 存储服务的版本控制
x-ms-client-request-id 可选。 提供客户端生成的不透明值,其中包含 1-kibite (KiB) 配置日志记录时记录在日志中的字符限制。 强烈建议使用此标头将客户端活动与服务器接收的请求相关联。 有关详细信息,请参阅 监视 Azure 队列存储

请求正文

请求正文包含以下 XML 格式的消息数据。 请注意,消息内容必须采用可以使用 UTF-8 编码的格式。

<QueueMessage>  
    <MessageText>message-content</MessageText>  
</QueueMessage>  

响应

响应包括 HTTP 状态代码和一组响应标头。

状态代码

成功的操作将返回状态代码 204(无内容)。 有关状态代码的信息,请参阅 状态和错误代码

响应头

此操作的响应包括以下标头。 响应还可以包含其他标准 HTTP 标头。 所有标准标头都符合 HTTP/1.1 协议规范

请求标头 说明
x-ms-request-id 此标头唯一标识发出的请求,可用于对请求进行故障排除。 有关详细信息,请参阅 API 操作故障排除
x-ms-version 指示用于运行请求的队列存储的版本。 针对 2009-09-19 和更高版本发出的请求将返回此标头。
Date 指示启动响应的时间的 UTC 日期/时间值。 服务生成此值。
x-ms-popreceipt 队列消息的 pop 回执。
x-ms-time-next-visible 表示消息何时在队列上可见的 UTC 日期/时间值。
x-ms-client-request-id 可以使用此标头对请求和相应的响应进行故障排除。 如果请求中存在,则此标头的值等于 标头的值 x-ms-client-request-id 。 该值最多为 1,024 个可见 ASCII 字符。 x-ms-client-request-id如果请求中不存在标头,则响应中不会显示此标头。

响应正文

无。

授权

帐户所有者可以执行此操作。 此外,具有共享访问签名且有权执行此操作的任何人都可以执行此操作。

示例请求和响应

以下请求将队列消息的可见性延长 30 秒并更新其内容。

PUT https://myaccount.queue.core.windows.net/myqueue/messages/663d89aa-d1d9-42a2-9a6a-fcf822a97d2c?popreceipt=AgAAAAEAAAApAAAAGIw6Q29bzAE%3d&visibilitytimeout=30&timeout=30 HTTP/1.1  
  

请求与以下标头一起发送:

x-ms-version: 2011-08-18  
x-ms-date: Mon, 29 Aug 2011 17:17:21 GMT  
Authorization: SharedKey myaccount:batcrWZ35InGCZeTUFWMdIQiOZPCW7UEyeGdDOg7WW4=  
Content-Length: 75  

请求与以下 XML 正文一起发送:

<QueueMessage>  
    <MessageText>new-message-content</MessageText>  
</QueueMessage>  

在发送请求后,将返回以下响应:

HTTP/1.1 204 No Content  
Content-Length: 0  
Server: Windows-Azure-Queue/1.0 Microsoft-HTTPAPI/2.0  
x-ms-request-id: df34a7dd-3cbe-4206-a586-d6de3cf225a7  
x-ms-version: 2011-08-18  
x-ms-popreceipt: AwAAAAIAAAApAAAAINtMQ29bzAEBAAAA  
x-ms-time-next-visible: Mon, 29 Aug 2011 17:17:51 GMT  
Date: Mon, 29 Aug 2011 17:17:21 GMT  

注解

Update Message如果指定的消息在队列中不存在,或者指定的弹出回执与消息不匹配,则操作失败。

pop 回执是由Get MessagesUpdate Message操作返回的。 在发生以下事件之一之前,pop 回执将始终有效:

  • 消息已过期。

  • 已使用从 或 Update Message收到的Get Messages最后一个弹出回执删除了邮件。

  • 不可见性时间已过,并且Get Messages请求已将消息取消排队。 在不可见性时间过后,消息将再次变为可见。 如果它由其他 Get Messages 请求检索,则返回的弹出回执可用于删除或更新邮件。

  • 已使用新的可见性超时更新消息。 在更新消息后,将返回新的 pop 回执。

可以使用 Update Message 操作来持续扩展队列消息的不可见性。 如果希望辅助角色租用队列消息,此功能非常有用。 例如,如果辅助角色调用 “获取消息” 并识别出处理消息需要更多时间,则它可以持续延长消息的不可见性,直到消息得到处理。 如果辅助角色在处理过程中失败,消息最终将再次变为可见,另一个辅助角色可以处理它。

另请参阅

授权对 Azure 存储的请求
状态和错误代码
队列存储错误代码