Windows Azure 系列-- Azure Queue的操作

- Storage Account, 和之前介绍的Azure Table和AzureBlob一样,你需要一个StorageAccount,只需要创建1次AzureStorageAccount就好了,它们3个是共享的。

创建好之后,就可以使用以下属性来访问Azure的Storage了:

private static CloudStorageAccount StorageAccount
        {
            get
            {
                var creds = new StorageCredentials(AccountName, Key);
                var account = new CloudStorageAccount(creds, useHttps: true);
                return account;
            }
        }

- 创建Azure Q

public static void CreateIfNotExist()
        {

            // Create the queue client
            CloudQueueClient queueClient = StorageAccount.CreateCloudQueueClient();
            CloudQueue queue = queueClient.GetQueueReference(OrdersQueue);

            // Create the queue if it doesn‘t already exist
            queue.CreateIfNotExists();
        }

需要注意的就是Q的名字,全部小写。

- 入队

	/// <summary>
        /// add msg to Q
        /// </summary>
        /// <param name="msg"></param>
        public static void AddMsg(string msg)
        {
            CloudQueueClient queueClient = StorageAccount.CreateCloudQueueClient();

            // Retrieve a reference to a queue.
            CloudQueue queue = queueClient.GetQueueReference(OrdersQueue);

            // Create a message and add it to the queue.
            CloudQueueMessage message = new CloudQueueMessage(msg);
            queue.AddMessage(message);
        }

代码逻辑很简单,就是向Queue中添加消息。不过要注意,这里只是为了演示没有考虑多线程环境以及并发情形,具体场景中为了不阻塞线程,你通过需要使用Asyn版本的方法,即:

queue.AddMessageAsync(message);

- 拿取指定数量的消息

	/// <summary>
        /// peek a number of messages from Q
        /// </summary>
        /// <param name="count"></param>
        /// <returns></returns>
        public static IList<string> Peek(int count)
        {
            // Create the queue client
            CloudQueueClient queueClient = StorageAccount.CreateCloudQueueClient();

            // Retrieve a reference to a queue
            CloudQueue queue = queueClient.GetQueueReference(OrdersQueue);

            // Peek at the next message
            IEnumerable<CloudQueueMessage> peekedMessages = queue.PeekMessages(count);
            return peekedMessages.Select(m => m.AsString).ToList();
        }

- 出队

	/// <summary>
        /// dequeue a msg
        /// </summary>
        /// <returns></returns>
        public static string DequeueMsg()
        {
            var queueClient = StorageAccount.CreateCloudQueueClient();

            // Retrieve a reference to a queue
            var queue = queueClient.GetQueueReference(OrdersQueue);

            var retrievedMessage = queue.GetMessage();

            //Process the message in less than 30 seconds, and then delete the message
            queue.DeleteMessage(retrievedMessage);

            return retrievedMessage.AsString;
        }

完整的测试代码:

	[TestMethod]
        public void AzureQ_Test()
        {
            // - create Q
            AzureQueueManager.CreateIfNotExist();

            // - Add 5 messages to Q
            for (int i = 0; i < 5; i++)
            {
               AzureQueueManager.AddMsg(string.Format("hello_{0}",i));
            }

            // peek all messages , Assert the order is correct
            var msgs = AzureQueueManager.Peek(5);
            Assert.IsTrue(msgs.Count == 5);
            Assert.IsTrue(msgs[0] == "hello_0");
            Assert.IsTrue(msgs[1] == "hello_1");
            Assert.IsTrue(msgs[2] == "hello_2");
            Assert.IsTrue(msgs[3] == "hello_3");
            Assert.IsTrue(msgs[4] == "hello_4");

            // - dequeue msg
            var msg = AzureQueueManager.DequeueMsg();
            Assert.IsTrue(msg == "hello_0");

            // - peek all messages , assert the first msg has been dequeued
            msgs = AzureQueueManager.Peek(5);
            Assert.IsTrue(msgs.Count == 4);
            Assert.IsTrue(msgs[0] == "hello_1");
            Assert.IsTrue(msgs[1] == "hello_2");
            Assert.IsTrue(msgs[2] == "hello_3");
            Assert.IsTrue(msgs[3] == "hello_4");

        }

测试逻辑在注释中已经全部说明

最后,使用Azure Storage Explorer查看结果:

时间: 2024-10-01 22:28:47

Windows Azure 系列-- Azure Queue的操作的相关文章

Windows Azure系列-- Azure Table的CRUD操作

1. 首先还是按照Azure Storage 的Pkg: 2. 可以下载AzureStorage Explorer 来管理Azure Storage的状态https://azurestorageexplorer.codeplex.com/ 如果是有很多文件要上传到BLOB,建议使用CloudBerry的Azure版本. 测试实体类: public class Student : TableEntity { public Student() { } public Student(string id

Windows Azure 系列-- Azure Redis Cache的配置和使用

如果还没有配置Azure Power shell 可以参照这里进行配置:http://blog.csdn.net/lan_liang/article/details/46850221 打开Azure Power Shell 1. 运行 Add-AzureAccount (如果已经添加就不用了) 2. 运行 New-AzureManagedCache -Name mycache -Location "South Central US" -Sku Basic -Memory 128MB 进

Windows Azure系列 -《基础篇》- 如何创建虚拟机

首先,使用自己的windows azure账号登陆管理平台manage.windowsazure.cn,找到并点击"虚拟机"标签,即可看到目前云平台中你所拥有的虚机实例,在我的环境中现在没有任何的虚机,所以我们可以通过点击图示的新建按钮进行选择或直接点击"创建虚拟机"进行创建: 点击"创建虚拟机",在DNS名称位置填写所建虚机的主机名,并选择映像和虚机大小(可选单核至8核,内存从768M至56G),这里说明一下,处于用户名不可以设置为常用的adm

Windows Azure系列 -《基础篇》- 创建虚拟网络

如何在Windows Azure中创建虚拟网络,以构建云环境中的虚拟局域网: 1.登陆Windows Azure平台,点击侧边栏网络按钮,在中间点击"创建虚拟网络". 2.在接下来的配置页面,填写虚拟网络的名称.选择地理外置和地缘组(如果已有),没有则选择创建新的地缘组. 3.接下来填写DNS服务器地址(没有则留空) 4.规划和配置IP网络,选择适用的地址空间. 5.最后点击确认按钮完成. Windows Azure系列 -<基础篇>- 创建虚拟网络,布布扣,bubuko.

Windows Azure系列 -《基础篇》- 存储

打开windows azure管理门户,点击下方的"新建", 定义一个存储名称,并设定好地缘组和位置,冗余的方式可以是地域之间的冗余,也可以是本地区域内的冗余,可以根据自己的实际情况选择. 目前windows azure在中国有两个数据中心可供选择,以托管订阅的虚机,建议选择离自己所在地位置更近一点的,访问效率会比较高. 设置完后,点击创建存储账号,既可以完成存储账号的创建工作. 在列表中我们可以看到创建的过程及状态, 通过点击所创建的存储,可以查看它的状态和修改存储配置, 在配置标签

Windows Azure系列 -《基础篇》- 基本设置

打开Windows Azure管理门户,在左侧边栏点击设置,展开设置页面 在这个页面中,我们可以看到你所拥有的订阅的信息和管理信息等. 这里简单说一下各项内容: 1. 订阅 订阅部分显示你目前账号所拥有的订阅信息以及管理帐户,如果你有多个订阅并绑定在一起,那么它将显示你所有的订阅信息. 2. 管理证书 在管理证书页面,我们可以管理用于windows azure的证书,点上传以便将证书导入windows azure. 3. 管理员 在windows azure中,如果需要有多个管理人员,我们可以在

Windows Azure系列 -《基础篇》- 计划程序

打开Windows Azure管理门户,在左侧边栏点击设置,展开计划程序页面,我们可以看到目前的作业情况: 在计划程序中,我们可以做的就是定制特定管理作业,并查看以往作业的执行情况. 点击作业集合,然后点击创建计划程序作业,即可创建你自己的作业, 在接下来的页面选择快速创建,填写作业名称并选择区域,点击下一步 在作业页面,填写作业的相关信息,包括名称.类型.方法等 确认重复周期和启动时间即可. 接下来就可以看到作业集合的状态, 以及可以查看各作业的执行情况,通过筛选可以有选择的查看所要关注的作业

初码-Azure系列-存储队列的使用与一个Azure小工具(蓝天助手)

初码Azure系列文章目录 将消息队列技术模型简化,并打造成更适合互联网+与敏捷开发的云服务模式,好像已经是行业趋势,阿里云也在推荐使用消息服务(HTTP协议为主)而来替代消息队列(TCP协议.MQTT协议为主),并且将消息服务纳入到了存储体系内(Azure也是,有人知道为什么吗,是因为数据持久化在了磁盘上?) 更搞笑的是,阿里云还在帮助中心贴了一个表格 真是扎心了老铁,这不是自己怼自己,逼人用消息服务吗.. 回到本文主题上来,这几天用了Azure的存储服务里面的存储队列,感觉还是非常好用的,大

初码-Azure系列-迁移PHP应用至Azure的一些实践记录和思考

最近客户在逐步迁移应用从阿里云到Azure,这次又轮到一个PHP+MySQL应用了,顺便也记一下流水账. 需求:迁移部署在阿里云上的ECS服务器(系列2,IO优化+2核4G+50G的SSD云盘+10M带宽+Server 2012 R2+安装在操作系统上的MySQL数据库[版本不详])到Azure上 最终的方案简易描述如下: 1.使用Azure虚拟机替代ECS服务器,使用MySQL Database on Azure替代本地MySQL 2.从Server 2012 R2操作系统升级到Windows