You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过HTTP请求用托管身份认证以Peek Lock模式读取Service Bus主题多条消息

实现步骤

1. 获取Managed Identity访问令牌

首先需要为当前环境的托管身份申请Service Bus资源的访问令牌,作用域固定为https://servicebus.azure.net/.default。
如果是在Azure资源(虚拟机、函数、应用服务等)内部运行,可直接调用实例元数据服务接口获取:

GET http://169.254.169.254/metadata/identity/oauth2/token?api-version=2018-02-01&resource=https://servicebus.azure.net/

请求必须携带请求头Metadata: true。如果使用用户分配托管标识,需要在请求参数中额外增加client_id=<用户分配托管标识的客户端ID>。
请求成功后,返回结果中的access_token字段即为后续认证需要的令牌。

2. 调用REST API批量Peek Lock读取消息

使用POST请求调用对应主题订阅的消息接收接口,该请求默认就是Peek Lock模式,消息会被临时锁定,锁定时长为订阅配置的默认锁定时间,最长5分钟。

请求格式

POST https://<服务总线命名空间>.servicebus.windows.net/<主题名>/subscriptions/<订阅名>/messages/head?timeout=60&max-message-count=<要读取的消息数,最大256>

必填请求头

  • Authorization: Bearer <第一步获取的access_token>
  • Content-Type: application/atom+xml;type=entry;charset=utf-8

响应说明

  • 状态码200:返回拉取到的多条消息,每条消息的BrokerProperties属性中包含MessageId和LockToken,后续处理消息需要用到这两个值
  • 状态码204:当前订阅暂无待消费的消息

3. 消息后续操作(可选)

完成消息(处理成功后永久删除)

DELETE https://<服务总线命名空间>.servicebus.windows.net/<主题名>/subscriptions/<订阅名>/messages/<MessageId>/<LockToken>

放弃消息(解锁消息让其他消费者读取)

PUT https://<服务总线命名空间>.servicebus.windows.net/<主题名>/subscriptions/<订阅名>/messages/<MessageId>/<LockToken>

请求需要额外携带头参数x-ms-servicebus-operation: abandon

注意事项

  • 单次请求最多拉取256条消息,总消息体大小不能超过1MB
  • 访问令牌有效期一般为1小时,过期前需要重新获取避免认证失败
  • 超时参数最大可设置为240秒,适合长轮询场景减少空请求次数

内容的提问来源于stack exchange,提问作者Rajat Bajaj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.09 16:39:03