你当前正在访问 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 Messages
或Update Message
操作返回的。 在发生以下事件之一之前,pop 回执将始终有效:
消息已过期。
已使用从 或
Update Message
收到的Get Messages
最后一个弹出回执删除了邮件。不可见性时间已过,并且
Get Messages
请求已将消息取消排队。 在不可见性时间过后,消息将再次变为可见。 如果它由其他Get Messages
请求检索,则返回的弹出回执可用于删除或更新邮件。已使用新的可见性超时更新消息。 在更新消息后,将返回新的 pop 回执。
可以使用 Update Message
操作来持续扩展队列消息的不可见性。 如果希望辅助角色租用队列消息,此功能非常有用。 例如,如果辅助角色调用 “获取消息” 并识别出处理消息需要更多时间,则它可以持续延长消息的不可见性,直到消息得到处理。 如果辅助角色在处理过程中失败,消息最终将再次变为可见,另一个辅助角色可以处理它。