云存储队列与Blob存储使用指南
立即解锁
发布时间: 2025-08-25 01:53:28 阅读量: 4 订阅数: 5 


Windows Azure入门与实践指南
### 云存储队列与Blob存储使用指南
#### 1. 云表存储概述
云表存储涉及多个方面,在数据访问上,有许多实用工具,如Fiddler 2、LINQ和REST。存储数据若不能修改或删除则毫无意义,所以还需掌握数据的更新和删除操作,例如在存储桶中更新数据的实用技巧和最佳实践。此外,关系存储也是云表存储的一个可选方案。
#### 2. 云队列与Blob存储简介
Azure框架提供了多种基本云存储形式,其中队列和Blob存储是本文重点。Azure队列是一种简单的异步工作调度机制,具有高可用性、耐用性和高效性能等优点。它能保证消息传递,确保消息至少被处理一次,还提供REST接口,方便不同语言的应用程序通过互联网访问。Azure队列可用于云应用和本地应用,主要有以下两个用途:
- 消息通信总线
- 组件或功能模块解耦
对于基于分布式前端架构的面向服务应用,结合Azure Blob存储,Azure队列在可扩展性方面有显著优势:
|优势|说明|
| ---- | ---- |
|后端流量测量|通过测量队列长度来确定后端流量,从而调整后端实例数量,提高资源利用率和扩展的平滑性。|
|系统模块解耦|基于消息发布/订阅架构的应用松耦合,便于独立替换组件、调整工作流逻辑和升级功能,无需中断无关组件或重新编译代码。|
|高效资源管理|根据系统资源的关键级别将其分组到不同队列,减少对其他组件或进程的影响。|
|流量高峰时的消息缓冲|队列架构允许消息缓冲和延迟处理,避免数据丢失,减少应用开发中处理消息持久化和重传的成本。|
Azure Blob存储可视为云环境中的特殊表存储,主要用于处理大量数据。与表存储的区别如下:
|存储类型|管理方式|数据存储格式|
| ---- | ---- | ---- |
|表存储|使用PrimaryKey和RowKey管理表|存储字符、字符串、文本、整数、浮点数和XML等便携式系统定义数据类型|
|Blob存储|使用存储容器和Blob ID(GUID)管理存储|以二进制格式存储数据块|
Blob存储基于账户访问,一个Azure账户可创建多个Blob容器,每个容器可包含多个Blob存储。Blob存储可以有元数据,并且可以使用块对象进行部分更新和提交。
#### 3. 创建云队列
创建云队列可从工作角色或Web角色进行,这里以工作角色为例。
##### 3.1 添加工作角色
在云服务解决方案中添加工作角色并关联到服务,该工作角色的职责如下:
- 从配置中获取账户信息。
- 从云存储中创建命名队列存储容器。
- 在队列存储中创建命名队列。
```mermaid
graph LR
A[开始] --> B[获取账户信息]
B --> C[创建队列存储容器]
C --> D[创建命名队列]
D --> E[结束]
```
##### 3.2 创建队列存储容器和命名队列
Azure队列存储的数据对象模型中,AcctQueueContainerMap表用于将队列名称映射到唯一的队列ID,该ID是QueueContainer表和Message表的外键。队列名称必须是字母数字字符,且区分大小写,只能使用小写字符。
在创建命名队列之前,需要实例化QueueStorage对象。在开发环境中,账户信息可以硬编码在配置文件中,也可以通过编程方式输入。以下是配置文件中的队列存储配置示例:
```xml
<appSettings>
<add key = "AccountName" value="devstoreaccount1"/>
<add key = "AccountSharedKey" value="<ACCOUNT_KEY>"/>
<add key="QueueStorageEndpoint" value="http://127.0.0.1:10001" />
</appSettings>
```
使用配置文件中的账户信息创建队列的示例代码如下:
```csharp
using System;
using System.Threading;
using Microsoft.ServiceHosting.ServiceRuntime;
using Microsoft.Samples.ServiceHosting.StorageClient;
using System.IO;
using System.Configuration;
using System.Net;
using System.Xml;
namespace CloudTableStorageService_WorkerRole
{
public class WorkerRole : RoleEntryPoint
{
public const string XML_PAYLOAD_QUEUE_NAME = "createxmlmessagequeue";
public const string XML_CONTAINER_NAME = "xmlpayload";
private Stream CreateXmlStreamBlob(byte [] byteData)
{
return new MemoryStream(byteData);
}
public override void Start()
{
QueueStorage queueStorage =
QueueStorage.Create(StorageAccountInfo
.GetDefaultQueueStorageAccountFromConfiguration());
MessageQueue queue = queueStorage.GetQueue(XML_PAYLOAD_QUEUE_NAME);
bool containerAndQueueCreated = false;
while (!containerAndQueueCreated)
{
try
{
queue.CreateQueue();
containerAndQueueCreated = true;
}
catch (WebException e)
{
if (e.Status == WebExceptionStatus.ConnectFailure)
{
RoleManager.WriteToLog(
"Error",
string.Format("Connect failure! The most likely reason is that
the local Development Storage tool is not running or your storage account configuration is
incorrect. " +
"Message: '{0}'", e.Message)
);
```
0
0
复制全文
相关推荐










