Azure ServiceBus REST API接收主题/订阅消息报错求助
使用Azure Service Bus REST API从主题订阅接收消息的示例
关键前提说明
- 必须使用HTTPS端点而非
sb://(sb://是AMQP协议专用,REST API需用https://<your-namespace>.servicebus.windows.net格式) - 正确的API版本:目前推荐使用
api-version=2021-06-01(稳定版),该版本完全支持订阅消息接收操作
单条消息接收(两种核心模式)
1. Peek-Lock模式(获取并锁定,处理完成后需手动确认/放弃)
- 请求方法:
POST - 请求URL:
https://<your-namespace>.servicebus.windows.net/<topic-name>/subscriptions/<subscription-name>/messages/head?api-version=2021-06-01 - 请求头:
Authorization:SAS令牌或Azure AD OAuth2令牌(格式示例:SharedAccessSignature sr=<namespace-url>&sig=<signature>&se=<expiry>&skn=<policy-name>)Content-Type:application/json(部分场景可留空,无需请求体)
- 响应:返回200 OK,响应体包含消息内容、锁ID、锁过期时间等信息,后续需用锁ID调用完成/放弃接口收尾
2. Receive-and-Delete模式(获取即直接删除消息)
- 请求方法:
POST - 请求URL:
https://<your-namespace>.servicebus.windows.net/<topic-name>/subscriptions/<subscription-name>/messages/delete?api-version=2021-06-01 - 请求头:同Peek-Lock模式
- 响应:返回200 OK,消息直接从订阅中移除
批量消息接收
1. Peek-Lock模式批量获取
- 请求方法:
POST - 请求URL:
(https://<your-namespace>.servicebus.windows.net/<topic-name>/subscriptions/<subscription-name>/messages/head/batch?api-version=2021-06-01&maxMessageCount=10maxMessageCount可指定1-100之间的数值,默认值为1) - 请求头:同单条模式
- 响应:返回200 OK,响应体为消息数组
2. Receive-and-Delete模式批量获取
- 请求方法:
POST - 请求URL:
https://<your-namespace>.servicebus.windows.net/<topic-name>/subscriptions/<subscription-name>/messages/delete/batch?api-version=2021-06-01&maxMessageCount=10 - 请求头:同单条模式
- 响应:返回200 OK,批量删除并返回获取到的消息集合
你的错误原因及修复方案
"提供的api-version无效"
- 原因:使用了
sb://协议的URL,且未在HTTPS请求的查询参数中携带正确版本号 - 修复:切换到HTTPS端点,并在URL末尾追加
?api-version=2021-06-01
- 原因:使用了
"指定的HTTP动词无效"
- 原因:订阅消息接收的REST接口不支持
GET或DELETE方法,必须使用POST - 修复:将请求方法改为
POST,并使用上述对应场景的正确URL路径
- 原因:订阅消息接收的REST接口不支持
权限要求
需确保你的身份凭证(SAS策略或AD账号)拥有Listen权限(对应Azure角色Azure Service Bus Data Receiver,或SAS策略配置Listen权限)
内容的提问来源于stack exchange,提问作者stu
相关产品推荐
相关产品推荐

