Windows Azure 之 Storage Queue常用操作

1.新建队列(Queue)

        #region New Queue

        public void NewQueue(string name)
        {
            if (CloudStorageAccount == null) return;

            try
            {
                ClearStatus();
                CloudQueueClient client = CloudStorageAccount.CreateCloudQueueClient();
                CloudQueue queue = client.GetQueueReference(name);
                queue.Create();

                Refresh();

                ReportSuccess("Queue " + name + " created");
            }
            catch (Exception ex)
            {
                ReportException(ex);
            }
        }

        #endregion

2. 拷贝队列 (Queue)

        #region Copy Queue

        public void CopyQueue(string name, string destName)
        {
            try
            {
                ListSpinnerVisible = Visibility.Visible;
                ClearStatus();

                CloudQueueClient client = CloudStorageAccount.CreateCloudQueueClient();
                CloudQueue queue = client.GetQueueReference(name);
                CloudQueue destQueue = client.GetQueueReference(destName);
                destQueue.CreateIfNotExist();

                CloudQueueMessage message;
                while ((message = queue.GetMessage(TimeSpan.FromSeconds(5))) != null)
                {
                    destQueue.AddMessage(new CloudQueueMessage(message.AsBytes));
                }

                ReportSuccess("Queue " + name + " copied to " + destName);
            }
            catch (Exception ex)
            {
                ReportException(ex);
            }
            Refresh();
        }

        #endregion

3. 重命名队列 (Queue)

#region Rename Queue

        public void RenameQueue(string name, string destName)
        {
            try
            {
                ListSpinnerVisible = Visibility.Visible;
                ClearStatus();

                CloudQueueClient client = CloudStorageAccount.CreateCloudQueueClient();
                CloudQueue queue = client.GetQueueReference(name);
                CloudQueue destQueue = client.GetQueueReference(destName);

                if (destQueue.Exists())
                {
                    ReportError("Cannot rename queue - the destination queue '" + destName + "' already exists");
                    ListSpinnerVisible = Visibility.Collapsed;
                    return;
                }

                destQueue.Create();

                CloudQueueMessage message;
                while ((message = queue.GetMessage()) != null)
                {
                    destQueue.AddMessage(new CloudQueueMessage(message.AsBytes));
                    queue.DeleteMessage(message);
                }

                queue.Delete();

                ReportSuccess("Queue " + name + " renamed to " + destName);
            }
            catch (Exception ex)
            {
                ReportException(ex);
            }
            Refresh();
        }

        #endregion

4. 删除队列 (Queue)

        #region Delete Queue

        public void DeleteQueue(string name)
        {
            try
            {
                ListSpinnerVisible = Visibility.Visible;
                ClearStatus();

                CloudQueueClient client = CloudStorageAccount.CreateCloudQueueClient();
                CloudQueue queue = client.GetQueueReference(name);

                queue.Delete();

                ReportSuccess("Queue " + name + " deleted");
            }
            catch (Exception ex)
            {
                ReportException(ex);
            }
            Refresh();
        }

        #endregion

5. 新建消息 (Message) 

        public void NewMessage(string queueName, string textContent)
        {
            if (CloudStorageAccount == null) return;

            try
            {
                ClearStatus();
                CloudQueueClient client = CloudStorageAccount.CreateCloudQueueClient();
                CloudQueue queue = client.GetQueueReference(queueName);
                queue.CreateIfNotExist();
                queue.AddMessage(new CloudQueueMessage(textContent));
                RefreshDetail(queueName);

                ReportSuccess("New message queued");
            }
            catch (Exception ex)
            {
                ReportException(ex);
            }
        }

6. 删除一个 (队列顶部的) 消息(Message)

public void DeleteMessage(string queueName)
        {
            try
            {
                DetailSpinnerVisible = Visibility.Visible;
                ClearStatus();

                CloudQueueClient client = CloudStorageAccount.CreateCloudQueueClient();
                CloudQueue queue = client.GetQueueReference(queueName);

                CloudQueueMessage message = queue.GetMessage();
                if (message != null)
                {
                    queue.DeleteMessage(message);
                }

                ReportSuccess("Message removed from queue");
            }
            catch (Exception ex)
            {
                ReportException(ex);
            }

            RefreshDetail(queueName);
        }

 7. 删除队列中的所有消息 (Message)

        public void DeleteAllMessages(string queueName)
        {
            CloudQueueMessage message;

            try
            {
                DetailSpinnerVisible = Visibility.Visible;
                ClearStatus();

                CloudQueueClient client = CloudStorageAccount.CreateCloudQueueClient();
                CloudQueue queue = client.GetQueueReference(queueName);

                while ((message = queue.GetMessage()) != null)
                {
                    queue.DeleteMessage(message);
                }

                ReportSuccess("Queue " + queueName + " cleared");
            }
            catch (Exception ex)
            {
                ReportException(ex);
            }
            RefreshDetail(queueName);
        }

8.上传消息到队列

#region Upload Message

        private string UploadQueueName;
        private CloudQueue UploadQueue;

        public void UploadMessages(string queueName, string[] filenames)
        {
            if (CloudStorageAccount == null ||
                filenames == null ||
                filenames.Length == 0 ||
                UploadInProgress)
                return;

            UploadInProgress = true;

            UploadFileList = filenames;

            DetailSpinnerVisible = Visibility.Visible;
            ReportActive("Uploading Messages..");

            UploadQueueName = queueName;
            CloudQueueClient client = CloudStorageAccount.CreateCloudQueueClient();
            UploadQueue = client.GetQueueReference(queueName);

            BackgroundWorker background = new BackgroundWorker();
            background.DoWork += new DoWorkEventHandler(Background_UploadMessages);
            background.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Background_UploadMessagesCompleted);
            background.RunWorkerAsync();
        }

        void Background_UploadMessages(object sender, DoWorkEventArgs e)
        {
            try
            {
                int count = 0;
                int errors = 0;

                if (UploadQueue != null)
                {
                    foreach (string filename in UploadFileList)
                    {
                        DetailSpinnerVisible = Visibility.Visible;

                        try
                        {
                            UploadQueue.AddMessage(new CloudQueueMessage(File.ReadAllBytes(filename)));
                            count++;
                        }
                        catch (Exception ex)
                        {
                            if (errors == 0)
                            {
                                ReportException(ex);
                            }
                            errors++;
                        }

                        RefreshDetail(UploadQueueName);
                    }
                }

                if (errors > 0)
                {
                    if (count > 0)
                    {
                        ReportWarning("Upload complete, " + numberof(count, "message", "messages") + " added, " + numberof(errors, "error", "errors"));
                    }
                    else
                    {
                        ReportError("Upload failed, " + numberof(count, "message", "messages") + " added, " + numberof(errors, "error", "errors"));
                    }
                }
                else
                {
                    ReportSuccess("Upload complete, " + numberof(count, "message", "messages") + " added");
                }
            }
            catch (Exception ex)
            {
                ReportException(ex);
            }
        }

        void Background_UploadMessagesCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            UploadInProgress = false;
            DetailSpinnerVisible = Visibility.Collapsed;
        }

        #endregion

9.从队列中下载消息

        #region Download Messages

        private CloudQueueMessage[] DownloadMessageList;

        public void DownloadMessages(string containerName, CloudQueueMessage[] messages, string[] filenames)
        {
            if (CloudStorageAccount == null || messages == null) return;

            DownloadMessageList = messages;
            DownloadFileList = filenames;

            DetailSpinnerVisible = Visibility.Visible;

            ReportActive("Downloading Messages...");

            DownloadInProgress = true;

            BackgroundWorker background = new BackgroundWorker();
            background.DoWork += new DoWorkEventHandler(Background_DownloadMessages);
            background.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Background_DownloadMessagesCompleted);
            background.RunWorkerAsync();
        }

        void Background_DownloadMessages(object sender, DoWorkEventArgs e)
        {
            try
            {
                CloudQueueMessage message;
                string filename;
                int count = DownloadMessageList.Length;

                for (int i = 0; i < count; i++)
                {
                    message = DownloadMessageList[i];
                    filename = DownloadFileList[i];
                    File.WriteAllBytes(filename, message.AsBytes);
                }

                ReportSuccess("Download Complete");
            }
            catch (Exception ex)
            {
                ReportException(ex);
            }
        }

        void Background_DownloadMessagesCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            DownloadInProgress = false;
            DetailSpinnerVisible = Visibility.Collapsed;
        }

        #endregion


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值