14

現在のキューの長さが指定された値を下回ったときに、選択した数のメッセージをキューに入れる必要があるユース ケースがあります。私は Azure で実行しているので、RetrieveApproximateMessageCount()メソッドを使用して現在のメッセージ数を取得しようとしています。これを呼び出すたびに、例外が発生しStorageClientException: The specified queue does not exist.ます。これが私がやったことのレビューです:

  1. ポータルでキューを作成し、キューへのメッセージを正常にキューに入れました。

  2. ポータルでストレージ アカウントを作成し、Created/Online 状態にある

  3. クエリを次のようにコーディングしました ( http および https オプションを使用):

    var storageAccount = new CloudStorageAccount(
            new StorageCredentialsAccountAndKey(_messagingConfiguration.StorageName.ToLower(),
            _messagingConfiguration.StorageKey), false);
    
    var queueClient = storageAccount.CreateCloudQueueClient();
    var queue = queueClient.GetQueueReference(queueName.ToLower());
    int messageCount;
    
    try
    {
        messageCount = queue.RetrieveApproximateMessageCount();
    }
    catch (Exception)
    {
        //Booom!!!!! in every case
    }
    
    // ApproximateMessageCount is always null
    
    messageCount = queue.ApproximateMessageCount == null ? 0 : queue.ApproximateMessageCount.Value;
    
  4. 名前の大文字と小文字が正しく区別され、特殊文字、数字、またはスペースが使用されていないことを確認しました。結果のURL は、API ドキュメント (例: http://myaccount.queue.core.windows.net/myqueuequeue ) に基づいて正しい形式で表示されます。 )

私が間違っていることに光を当てるのを手伝ってくれる人はいますか。


編集

MessageFactoryを使用してを作成し、QueueClientメッセージを正常にエンキュー/デキューできることを確認しました。キューを使用するとCloudStorageAccount、存在しないため、カウントと GetMessage ルーチンが機能しません。これらは同じものではないと思いますか?私が正しいと仮定すると、必要なのは Service Bus Queue の長さを測定することです。それは可能ですか?

4

2 に答える 2

64

RetrieveApproximateMessageCount()廃止されました

結果を得るためにApproximateMessageCountを使用したい場合は、これを試してください

CloudQueue q = queueClient.GetQueueReference(QUEUE_NAME);
q.FetchAttributes();
qCnt = q.ApproximateMessageCount;
于 2014-04-25T07:37:49.180 に答える
6

CloudQueue メソッドは非推奨になりました (v11 SDK とともに)。

次のスニペットは現在の代替品です ( Azure Docsから) 。

//-----------------------------------------------------
// Get the approximate number of messages in the queue
//-----------------------------------------------------
public void GetQueueLength(string queueName)
{
    // Get the connection string from app settings
    string connectionString = ConfigurationManager.AppSettings["StorageConnectionString"];

    // Instantiate a QueueClient which will be used to manipulate the queue
    QueueClient queueClient = new QueueClient(connectionString, queueName);

    if (queueClient.Exists())
    {
        QueueProperties properties = queueClient.GetProperties();

        // Retrieve the cached approximate message count.
        int cachedMessagesCount = properties.ApproximateMessagesCount;

        // Display number of messages.
        Console.WriteLine($"Number of messages in queue: {cachedMessagesCount}");
    }
}

https://docs.microsoft.com/en-us/azure/storage/queues/storage-dotnet-how-to-use-queues?tabs=dotnet#get-the-queue-length

于 2020-12-03T06:32:26.233 に答える