【发布时间】:2021-11-20 08:46:05
【问题描述】:
仅当队列在 Azure 存储中不可用时,我才想创建队列。我正在使用这个 PutMessage 方法在队列中创建消息。此方法工作正常,但问题在于我需要附加 CreateQueue 方法。
我的 createqueue 方法也可以正常工作,但我无法确定需要添加的位置,因为当 PutMessage 调用 request.GetResponse() 时,如果队列错误,它会生成错误。谢谢
public static void PutMessage(String queueName, String message)
{
String requestMethod = "POST";
String urlPath = $"{queueName}/messages";
String storageServiceVersion = "2017-11-09";
String dateInRfc1123Format = DateTime.UtcNow.ToString("R", CultureInfo.InvariantCulture);
String messageText = $"<QueueMessage><MessageText>{message}</MessageText></QueueMessage>";
UTF8Encoding utf8Encoding = new UTF8Encoding();
Byte[] messageContent = utf8Encoding.GetBytes(messageText);
Int32 messageLength = messageContent.Length;
String canonicalizedHeaders = String.Format(
"x-ms-date:{0}\nx-ms-version:{1}",
dateInRfc1123Format,
storageServiceVersion);
String canonicalizedResource = $"/{StorageAccountName}/{urlPath}";
String stringToSign = $"{requestMethod}\n\n\n{messageLength}\n\n\n\n\n\n\n\n\n{canonicalizedHeaders}\n{canonicalizedResource}";
String authorizationHeader = CreateAuthorizationHeader(stringToSign);
Uri uri = new Uri("https://" + StorageAccountName + ".queue.Azure.com/" + urlPath);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
request.Method = requestMethod;
request.Headers.Add("x-ms-date", dateInRfc1123Format);
request.Headers.Add("x-ms-version", storageServiceVersion);
request.Headers.Add("Authorization", authorizationHeader);
request.ContentLength = messageLength;
using (Stream requestStream = request.GetRequestStream())
{
requestStream.Write(messageContent, 0, messageLength);
}
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
String requestId = response.Headers["x-ms-request-id"];
}
}
【问题讨论】:
-
如果我正确理解您的问题,您会担心何时应该调用创建队列方法。我说的对吗?
-
是的,问题是如果找不到队列,我们将根据消息来决定,然后需要在添加消息后首先在 azure 队列上创建队列。
-
使用rest api调用是否可行?
-
请看下面我的回答。
标签: azure api rest azure-storage azure-storage-queues