У меня есть вариант использования, когда мне нужно поставить в очередь определенное количество сообщений, когда текущая длина очереди падает ниже указанного значения. Поскольку я работаю в Azure, я пытаюсь использовать метод RetrieveApproximateMessageCount()
, чтобы получить текущее количество сообщений. Каждый раз, когда я вызываю это, я получаю исключение с указанием StorageClientException: The specified queue does not exist.
. Вот обзор того, что я сделал:
Создал очередь на портале и успешно поставил в нее сообщения.
Создана учетная запись хранения на портале, и она находится в состоянии Создано / В сети.
Закодировал запрос следующим образом (с использованием параметров 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;
Я подтвердил, что имя заключено в правильный регистр и не содержит специальных символов, чисел или пробелов, и результирующий
queue
URL выглядит так, как если бы он правильно сформирован на основе документации API (например, http://myaccount.queue.core.windows.net/myqueue)
Может ли кто-нибудь помочь пролить свет на то, что я делаю неправильно.
ИЗМЕНИТЬ
Я подтвердил, что с помощью MessageFactory
я могу создавать QueueClient
, а затем успешно ставить / выводить из очереди сообщения. Когда я использую CloudStorageAccount
, очередь никогда не присутствует, поэтому процедуры подсчета и GetMessage никогда не работают. Полагаю, это не одно и то же ??? Предполагая, что я прав, мне нужно измерить длину очереди служебной шины. Это возможно?
queue.AddMessage(...)
илиqueue.GetMessage(...)
? - person user94559   schedule 21.06.2012queue.GetMessage()
прямо передqueue.RetrieveApproximateMessageCount()
. Бьюсь об заклад, это не сработает с той же ошибкой. - person user94559   schedule 21.06.2012Services --> Service Bus --> Queues
на портале, я вижу, что очередь существует и в ней есть сообщения. Когда я используюMessagingFactory
, я могу без проблем создаватьQueueClient
и Enqueue / Dequeue, но не вижу длины. Когда я используюCloudStorageAccount
и создаю экземплярCloudQueue
, очереди не существует. Полагаю, это не те очереди? Как узнать длину очереди служебной шины? Я только что перепутал отдельные технологии? - person JoeGeeky   schedule 21.06.2012