本文是Windows Azure入门教学的第五篇文章。
本文将会介绍如何使用Queue Storage。Queue Storage提供给我们一个云端的队列。我们可以用Queue Storage来进行进程间的相互通信(包括运行在不同机器上的进程之间的通信)。
一个使用Queue Storage经典的场景是,在一个Web应用程序中,用户通过表单递交给服务器数据,服务器收到数据后将进行处理,而这一处理将花费很多时间。这种情况下,服务器端通过Queue Storage可以把用户递交的信息存储在队列中,后台再运行一个程序从队列中取得数据进行信息的处理。
以往如果程序时运行在Windows操作系统上,那么我们可以使用MSMQ来做类似的工作。而Queue Storage的出现为我们提供了另一种选择。特别是在非Windows操作系统上,我们依然可以使用Queue Storage的REST API来很方便地使用它。
有关Queue Storage REST API的详细信息,请参见Queue 服务 API。
为了方便.NET开发人员,我们在SDK中提供了Microsoft.WindowsAzure.StorageClient类来帮助发送REST请求。
在开始本教学之前,请确保你从Windows Azure 平台下载下载并安装了最新的Windows Azure开发工具。本教学使用Visual Studio 2010作为开发工具。
步骤一:创建解决方案和项目
由于我们要在本地模拟环境下测试Queue Storage,首先,请确保Storage Emulator已经启动。我们可以找到管理器的进程手动启动或者让Visual Studio 2010帮助我们启动他。
右击工具栏中Windows Azure模拟器的图标,选择”Show Storage Emulator UI”。弹出如下图所示的窗口:
我们要关注的是Service management中Queue所在的一行。要确保Status为Running。
确认完毕后启动Visual Studio 2010,并且新建两个Console项目。我们将演示如何在一个Console程序中往Queue Storage中添加信息然后另外一个Console程序如何读取并处理信息。
步骤二:添加SDK程序集引用
请在项目属性页里确认项目的Target framework的值是.NET Framework 4或.NET Framework 3.5。然后在两个Console项目中均添加C:Program FilesWindows Azure SDKv1.3refMicrosoft.WindowsAzure.StorageClient.dll的引用。该路径为SDK默认安装路径,如果你不能在这个路径中找到Microsoft.WindowsAzure.StorageClient.dll请从SDK安装路径中寻找。
步骤三:添加代码
首先在两个项目中的Program.cs中均引用命名空间:
1 2 3 4 5 |
|
然后在其中一个项目(为了叙述方便,后面称之为Client项目)的Main方法中加入如下代码,我们将用它来向Queue Storage中添加信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
|
接着在另外一个项目(为了叙述方便,后面称之为Server项目)的Main方法中加入如下代码,我们将用它来从Queue Storage中读取信息和进行处理。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
|
步骤四:观察并分析代码
步骤三中的代码中,首先我们通过CloudStorageAccount.DevelopmentStorageAccount来说明我们使用的本地的Development Storage自带账户而不是真正的云端存储服务账户。(如果要用真实账户可以使用
// DefaultEndpointsProtocol=https可以改成DefaultEndpointsProtocol=http表示用HTTP而不是HTTPS
CloudStorageAccount.Parse("DefaultEndpointsProtocol=https;AccountName=[用户名];AccountKey=[密码]");
来实例化对象)然后通过该账户类来实例化一个Queue客户端类。这两步是使用SDK中StorageClient程序集来调用Queue Storage服务的必要步骤。
Client项目中的代码相对简单。大约每隔3秒向Queue Storage中插入一条数据。Server端的项目中我们则大约每隔3秒从Queue Storage中读取一条数据。处理完毕后将之删除。对于为什么必须在读取后显示删除的问题请参考注释部分。
步骤五:运行程序
先运行Client程序然后运行Server个程序。如果一切正常,你将会看到Server项目的Console程序输出收到的消息:
注意由于是本地模拟,Client和Server程序需要要在同一台机器上运行。但是如果使用真实账户的话,Client和Server程序就可以跨越机器进行通信了。