Azure ServiceBus REST API - 接收主题/订阅上的消息

问题描述 投票:0回答:1

是否有人有使用 Azure ESB REST API 从主题/子接收消息的示例。

我可以点击订阅并获取订阅摘要详细信息,但无法了解如何单独或批量获取消息。

我查看了 Azure REST API,其中有队列示例和各种语言的 SDK 语言示例。 我想探索 REST 方法,因为这里回答了另一个类似的问题,并指出 SDK 是 REST API 的包装器。 所以我宁愿直接使用 REST API。

最初使用 Postman,但目的是从集成平台调用 API。

提前致谢。

尝试在 sbus url 上以及从服务总线资源管理器获取的 URL 上使用 GET 和 DELETE 动词。 本来期待一堆消息,但在这些动词上出现以下错误:

获取

400
提供的 api 版本“”不支持该请求。 TrackingId:de9fa084-0f97-4098-8a46-9193bd1e0ccd_G40,SystemTracker:sbus-pep-dev-ukso-001:主题:satesttopic,时间戳:2024-08-02T15:47:47

删除

400
指定的 HTTP 谓词 (DELETE) 无效。要了解更多信息,请访问 https://aka.ms/sbResourceMgrExceptions。 。 TrackingId:913095cc-f0e6-4b88-af2c-1db1c537e1c3_G40,SystemTracker:sbus-pep-dev-ukso-001:主题:satesttopic,时间戳:2024-08-02T15:48:13

我使用这个作为 URL:

sb://<my base url>/satesttopic/Subscriptions/SATessSub  

这让我遇到了未经授权删除订阅的错误,这似乎完全合理。 和

sb://<my base url>/satesttopic/Subscriptions/SATessSub/messages

尝试获取一条消息或一批消息,这会导致删除错误。

我必须承认我不知道从哪里获取 API 版本。

感谢您查看此内容。

azure rest esb
1个回答
0
投票

要使用 REST API 从 Azure 服务总线主题订阅接收消息,您需要使用

DELETE
方法以及适当的请求 URL 和标头。根据您的错误消息,您似乎遇到了 API 版本控制和 HTTP 动词问题,并且您没有使用正确的 REST API URL。 REST API URL 应采用以下格式:

https://{serviceNamespace}.servicebus.windows.net/{topicPath}/subscriptions/{subscriptionName}/messages/head
or
https://your-namespace.servicebus.windows.net/your-topic/subscriptions/your-subscription/messages/head
  • 我参考此 MSDOC 从 Azure 服务总线主题接收和删除消息。要接收消息,您需要使用具有以下 URL 模式的
    DELETE
    HTTP 方法:

对于主题订阅:

DELETE https://your-namespace.servicebus.windows.net/your-topic/subscriptions/your-subscription/messages/head?timeout=60 HTTP/1.1  
Authorization: SharedAccessSignature sr=your-namespace&sig=Fg8yUyR4MOmXfHfj55f5hY4jGb8x2Yc%2b3%2fULKZYxKZk%3d&se=1404256819&skn=RootManageSharedAccessKey  
Host: your-namespace.servicebus.windows.net  
Content-Length: 0
  • 为了为 Azure 服务总线生成共享访问签名,我使用了这个 MSDOC
    private const string ServiceBusNamespace = "your_service_bus_namespace";
    private const string SasKeyName = "your_sas_key_name";
    private const string SasKey = "your_sas_key";

    static void Main(string[] args)
    {
        string sasToken = GenerateSasToken(ServiceBusNamespace, SasKeyName, SasKey);
        Console.WriteLine(sasToken);
    }

    private static string GenerateSasToken(string serviceBusNamespace, string sasKeyName, string sasKey)
    {
        string uri = $"https://{serviceBusNamespace}.servicebus.windows.net/";
        string encodedResourceUri = HttpUtility.UrlEncode(uri);
        string expiry = ((int)(DateTime.UtcNow - new DateTime(1970, 1, 1)).TotalSeconds + 3600).ToString();

        string stringToSign = $"{encodedResourceUri}\n{expiry}";
        using (var hmac = new HMACSHA256(Encoding.UTF8.GetBytes(sasKey)))
        {
            string signature = Convert.ToBase64String(hmac.ComputeHash(Encoding.UTF8.GetBytes(stringToSign)));
            return $"SharedAccessSignature sr={encodedResourceUri}&sig={HttpUtility.UrlEncode(signature)}&se={expiry}&skn={sasKeyName}";
        }
    }

Sas 代币输出: enter image description here

Azure 服务总线订阅消息: enter image description here

使用 Postman 实现 Rest Api: enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.