Azure Queue队列存储(2)
2017-02-28 16:08
357 查看
Azure Queue队列存储(2)
以编程方式访问Queue队列存储获取组件
您可以使用NuGet来获取Microsoft.WindowsAzure.Storage.dll组件。 在Solution Explorer里右键点击你的Project, 然后选择Manage Nuget Packages, 在线搜索 “WindowsAzure.Storage” 然后点击安装Azure存储包和相关包。
Azure SDK .NET版也包含Microsoft.WindowsAzure.Storage.dll, 您可以在.NET k开发者中心拿到。 该组件安装在%Program Files%\Microsoft SDKs\Azure.NET
SDK\\ref\ 目录下。
名字空间声明
把下面的代码加到你的C#程序的最上面以便于您访问Azure存储:
using Microsoft.WindowsAzure.Storage; using Microsoft.WindowsAzure.Storage.Auth; using Microsoft.WindowsAzure.Storage.Queue;
确保您引用Microsoft.WindowsAzure.Storage.dll组件
检索连接字符串
您可以使用CloudStorageAccount 类型来展示您的存储账户信息。 如果您使用Azure项目模板或者您有一个关于Microsoft.WindowsAzure.CloudConfigurationManager名字空间的引用, 您也可以是用CloudConfigurationManager 类型从Azure服务配置表来检索您的存储连接字符串和账户信息。
CloudStorageAccount storageAccount = CloudStorageAccount.Parse( CloudConfigurationManager.GetSetting("StorageConnectionString"));
如果您的应用没有引用Microsoft.WindowsAzure.CloudConfigurationManager, 并且您的连接字符串存放在web.config或者app.config里, 那您就可以使用ConfigurationManager来获取连接字符串了。 不过您还需要添加一个对于System.Configuration.dll 的引用, 然后再添加一个命名空间的声明。
using System.Configuration;
using System.Configuration; ... CloudStorageAccount storageAccount = CloudStorageAccount.Parse( ConfigurationManager.ConnectionStrings["StorageConnectionString"]);
创建一个queue
CloudQueueClient 可以让您访问到queues的reference objects。 下面的代码新建一个 CloudQueueClient 对象。 本示例中所用的所有的代码都使用Azure应用服务配置中的同一个存储连接串。
// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse( CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
使用queueClient 对象来拿到您想使用的queue的引用。 如果queue不存在, 可以创建一个
// Retrieve a reference to a queue CloudQueue queue = queueClient.GetQueueReference("myqueue"); // Create the queue if it doesn't already exist queue.CreateIfNotExists();
向queue中插入一条消息message
向一个已经存在的queue中插入一条消息, 需要首先新建一个CloudQueueMessage, 然后调用AddMessage 方法。 CloudQueueMessage既可以从从一个string(UTF-8)或者从一个byte数组创建。 下面是示例代码
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse( CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Create the queue if it doesn't already exist.
queue.CreateIfNotExists();
// Create a message and add it to the queue.
CloudQueueMessage message = new CloudQueueMessage("Hello, World");
queue.AddMessage(message);
peek下一条消息
你可以通过调用PeekMessage 方法来查看queue的头的一条消息而不需要删除消息本身。
// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse( CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Peek at the next message
CloudQueueMessage peekedMessage = queue.PeekMessage();
// Display message.
Console.WriteLine(peekedMessage.AsString);
修改加入queue队列的消息
您可以在原处修改一个queue中的内容。 如果消息本身是work任务, 那您可以使用这个功能来来更新work任务的状态。 下面的示例代码展示了更新queue消息的新内容, 把可视性timeout的时间延长了60秒。
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse( CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Get the message from the queue and update the message contents.
CloudQueueMessage message = queue.GetMessage();
message.SetMessageContent("Updated contents.") ;
queue.UpdateMessage(message,
TimeSpan.FromSeconds(0.0), // Make it visible immediately.
MessageUpdateFields.Content | MessageUpdateFields.Visibility);
De-queue下一条消息
可以通过两步来De-queue queue中的消息。 调用GetMessage来获得queue中的下一条消息. GetMessage返回的消息将会对已其它的代码变成不可见。 默认的情况下, 这个不可见性持续30秒。要想完全删除这条消息, 你需要调用DeleteMessage方法。
// Retrieve storage account from connection string
CloudStorageAccount storageAccount = CloudStorageAccount.Parse( CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Get the next message
CloudQueueMessage retrievedMessage = queue.GetMessage();
//Process the message in less than 30 seconds, and then delete the message
queue.DeleteMessage(retrievedMessage);
针对common Queue storage APIs使用Async-Await模式
下面的示例代码展示了针对common Queue storage APIs使用的Async-Await模式
// Create the queue if it doesn't already exist if(await queue.CreateIfNotExistsAsync()) { Console.WriteLine("Queue '{0}' Created", queue.Name); } else { Console.WriteLine("Queue '{0}' Exists", queue.Name); } // Create a message to put in the queue CloudQueueMessage cloudQueueMessage = new CloudQueueMessage("My message"); // Async enqueue the message await queue.AddMessageAsync(cloudQueueMessage); Console.WriteLine("Message added"); // Async dequeue the message CloudQueueMessage retrievedMessage = await queue.GetMessageAsync(); Console.WriteLine("Retrieved message with content '{0}'", retrievedMessage.AsString); // Async delete the message await queue.DeleteMessageAsync(retrievedMessage); Console.WriteLine("Deleted message");
其它de-queuing消息的方法
通常可以有两种方式来自定义消息中的检索。 首先, 您可以拿到一批消息(最多32)。 第二您可以设置更长的不可见时间来允许代码完成消息的操作。
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse( CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");
foreach (CloudQueueMessage message in queue.GetMessages(20, TimeSpan.FromMinutes(5)))
{
// Process all messages in less than 5 minutes, deleting each message after processing.
queue.DeleteMessage(message);
}
得到queue队列的长度
你可以拿到queue中估计的消息数。FetchAttributes 方法向queue服务抓取queue属性信息, 其中包括消息数。
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse( CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Fetch the queue attributes.
queue.FetchAttributes();
// Retrieve the cached approximate message count.
int? cachedMessageCount = queue.ApproximateMessageCount;
// Display number of messages.
Console.WriteLine("Number of messages in queue: " + cachedMessageCount);
删除一个queue
调用Delete方法来删除queue对象
// Retrieve storage account from connection string.
CloudStorageAccount storageAccount = CloudStorageAccount.Parse( CloudConfigurationManager.GetSetting("StorageConnectionString"));
// Create the queue client.
CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient();
// Retrieve a reference to a queue.
CloudQueue queue = queueClient.GetQueueReference("myqueue");
// Delete the queue.
queue.Delete();
相关文章推荐
- Azure Queue队列存储(2)
- Azure Queue队列存储(1)
- Queue队列 链式存储实现
- C# Azure 存储-队列
- Windows Azure Service Bus (3) 队列(Queue) 使用VS2013开发Service Bus Queue
- Java使用Rabbitmq惊喜队列queue和消息内容的本地持久化核心方法。(内容存储在硬盘)
- 微软云平台 Azure简介 (七)Windows Azure 存储之Queue
- 初码-Azure系列-存储队列的使用与一个Azure小工具(蓝天助手)
- Windows Azure Service Bus (2) 队列(Queue)入门
- Berkeley DB的数据存储结构——哈希表(Hash Table)、B树(BTree)、队列(Queue)、记录号(Recno)
- [C]只存储整形的无锁队列
- java中使用队列:java.util.Queue
- Nginx高效数据结构(3)——队列(ngx_queue_t)
- ASIHTTPRequest和ASINetworkQueue实现队列下载并查看结果
- JAVA阻塞队列之ArrayBlockingQueue
- 栈(Stack)和队列(Queue)
- [LeetCode] Implement Queue using Stacks 用栈来实现队列
- 索引优先队列-IndexedPrirotyQueue的原理及实现(源码)
- 队列 Queue 的定义及实现
- C++实现的队列queue