当前位置:首页 » 服务存储 » 队列服务和文件存储服务
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

队列服务和文件存储服务

发布时间: 2022-01-30 17:43:37

A. 怎么使用Windows Azure Queue Storage 服务

什么是Windows Azure Queue Storage 队列存储

Windows Azure Queue
Storage存储大量的信息,可以在世界任何地方通过验证的调用,使用HTTP或HTTPS访问的服务。一个单一的队列信息可高达64KB的大小,队列
可以包含数百万条消息,每个存储帐户(storage account)限制的总容量高达100TB。队列存储的常见用途包括:

创建异步处理积压的工作
从Windows Azure的Web角色的消息传递到Windows Azure Worker角色

基本概念

队列服务包含以下组件:

URL 格式:队列服务,是通过REST来访问的,基于URL地址访问。格式如下:

http://<storage account>.queue.core.windows.net/<queue>

上面图表的Queue的URL为:

http://myaccount.queue.core.windows.net/imagesToDownload

存储账户(Storage Account):Azure Storage访问是通过REST方式,使用对称加密方式(Symmetric)。一个账户能访问所有的云存储(Blob、Table、Queue)。

队列(Queue):一个队列能存储大量的信息。存储队列不能保证FIFO,而且还能多次读取同一个消息。

消息(Message):能存储字符串或者字节数组,一个消息不能大于64k(包括除message信息的其他信息,传递的信息大小不能超过49152字节)。

创建存储账户

在使用云存储前,得需要到云管理平台上创建存储账户。

构建访问存储连接字符串(StorageConnectionString)

连接字符串包含三个部分:DefaultEndpointsProtocol,AccountName,AccountKey

EndpointsProtocol只能是https和http,再次说明他是基于REST方式访问的(REST over http or https)。

AccountName和AccountKey可以到云管理平台查询到

连接窜组成格式如下:

DefaultEndpointsProtocol=https;AccountName=[AccountName];AccountKey=[AccountKey]

配置文件

部署云服务需要两个文件,分别是*.cspkg和*.cscfg。

前者其实是一个zip压缩文件,包含所有部署的配置信息。

后者包含webrole和worker role的工作的具体信息。

我们可以把连接字符串写在*.cscfg里面,也就是开发时云服务项目的*.cloud.cscfg、*.local.cscfg、*.csdef文件里面。

<configuration>
<connectionStrings>
<add name="StorageConnectionString"
connectionString="DefaultEndpointsProtocol=https;AccountName=[AccountName];AccountKey=[AccountKey]" />
</connectionStrings>
</configuration>

怎样开发访问队列

需要的程序集如下:

Microsoft.WindowsAzure.Storage.dll

开发代码:

// 通过连接字符串解析CloudStorageAccount实例
// Endpoint "http://storageacount.queue.core.windows.net"
CloudStorageAccount cloudStorageAccount = CloudStorageAccount.Parse(CloudConfigurationManager.GetSetting("StorageConnetionString"));

#region 队列操作
// 创建客户端存储队列实例
CloudQueueClient queueClient = cloudStorageAccount.CreateCloudQueueClient();

// 通过队列名称获取服务端存储队列实例
// Endpoint "http://storageaccount.queue.core.windows.net/eric-queue-1".
// 队列名称必须为小写
CloudQueue cloudQueue = queueClient.GetQueueReference("eric-quque-1");
//也可以直接创建
//CloudQueue cloudQueue = new CloudQueue(new Uri("http://storageaccount.queue.core.windows.net/eric-queue-1"), new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(accountName, keyValue));

// 如果队列不存在就创建一个
cloudQueue.CreateIfNotExists();

// 清除队列,清除可视、不可视和过期的所有消息。
cloudQueue.Clear();

// 删除队列,这个队列就不存在了
cloudQueue.Delete();
#endregion

#region 队列消息操作

// 发送消息,消息可以为字符串或者字节数组,最大为64K, TTL最大为7天,visibilityDelay必须小于TTL
cloudQueue.AddMessage(new CloudQueueMessage("Hello world!"), new TimeSpan(0, 0, 10), new TimeSpan(0, 0, 1), null, null);

// 获取消息, 获取从队头开始第一个可视的消息,就是nextVisibilityTimeout到了的消息
// 输入的参数visibilityTimeout是这个消息下次可视的时间间隔
// 通过Get方式获取的消息,能够更新(update)和删除(delete)
CloudQueueMessage message = cloudQueue.GetMessage(new TimeSpan(0, 0, 10));

// 修改消息,修改消息的内容和下次可视时间间隔, 也可以只修改下次可视时间间隔
message.SetMessageContent("Hello Eric Wen!");
cloudQueue.UpdateMessage(message, new TimeSpan(0, 0, 10), MessageUpdateFields.Content | MessageUpdateFields.Visibility);
cloudQueue.UpdateMessage(message, new TimeSpan(0, 0, 10), MessageUpdateFields.Visibility);

// 删除消息, 通过Get方式获取的消息,它的Id和PopReceipt有值,有这两个值才能修改和删除消息
cloudQueue.DeleteMessage(message);
cloudQueue.DeleteMessage(message.Id, message.PopReceipt);

// 查看消息,只能查看可视的消息,获取从队头开始第一个可视的消息。
// 查看消息不会改变CloudQueueMessage的DequeueCount和NextVisibleTime属性
// 这个消息是只读消息,不能更新和删除操作
message = cloudQueue.PeekMessage();

// 获取批量消息, 一次只能最多获取32条消息
IEnumerable<CloudQueueMessage> query = cloudQueue.GetMessages(32);
query = cloudQueue.PeekMessages(32);

#endregion

B. 文件存储服务器

您可以再用硬盘对拷啊
及时把数据备份
同时您可以做个磁盘镇列

C. 队列的两种存储方式对比

队列的两种存储方式分为消息投递实时性:使用短轮询方式,实时性取决于轮询间隔时间:使用长轮询,同写入实时性一致,消息的写入延时通常在几个毫秒。总结:短轮询:周期性的向服务提供方发起请求,获取数据优点:前后端程序编写比较容易。缺点:请求中有大半是无用,难于维护,浪费带宽和服务器资源;响应的结果没有顺序(因为是异步请求,当发送的请求没有返回结果的时候,后面的请求又被发送。而此时如果后面的请求比前面的请 求要先返回结果,那么当前面的请求返回结果数据时已经是过时无效的数据了)。长轮询:客户端向服务器发送请求,服务器接到请求后保持住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。优点:在无消息的情况下不会频繁的请求,耗费资源小。缺点:服务器hold连接会消耗资源,难于管理维护。消费失败重试Kafka:消费失败不支持重试RocketMQ:消费失败支持定时重试,每次重试间隔时间顺延总结:kafka也可以通过编写代码来实现写入和消费失败的重试机制,这种要求需要用户来编写代码实现,kafka只是提供了这种方式,但并不是他推荐的使用方式,他的设计模式上只是兼顾了这种情况,并不是重点。RocketMQ在设计上就考虑了这种情况,在提供的官方api中提供了重试的设置,用户可以选择多种模式的重试机制,以及自定义的重试逻辑,简单场景下用户只用设置一下参数即可。关于需要重试的场景例如充值类应用,当前时刻调用运营商网关,充值失败,可能是对方压力过多,稍后在调用就会成功,如支付宝到银行扣款也是类似需求。这里的重试需要可靠的重试,即失败重试的消息不因为Consumer宕机导致丢失。

D. 文件服务器和数据库服务器有什么区别

文件服务器:存放图片,视频,文档文件等。
数据库服务器:安装了服务器软件,一般不会直接存储图片,文件,而是存储文件的地址信息。

E. 存储服务器和磁盘阵列有什么区别

1、性质不同:

磁盘阵列是一种方法,存储服务器是物理设备。独立磁盘冗余阵列(RAID)是把相同的数据存储在多个硬盘的不同的地方的方法。存储服务器是指为特定目标而设计,因此配置方式也不同。它可能是拥有一点额外的存储,也可能拥有很大的存储空间的服务器。

2、用途不同:

存储服务器用于提供存储数据的服务。RAID技术用于高了数据存取速度、实现了对数据的冗余保护。

3、组成不同:

磁盘阵列通过把数据放在多个硬盘上,输入输出操作能以平衡的方式交叠,改良性能。因为多个硬盘增加了平均故障间隔时间(MTBF),储存冗余数据也增加了容错。

存储服务器通常是独立的单元。有的时候它们会被设计成4U机架式。或者也可以由两个箱子组成一个存储单元以及一个位于附近的服务器。

F. NAS网络存储设备和文件服务器的区别

以ReadyNAS为例了解传统服务器与NAS网络存储功能对照

不像传统的服务器系统,需要若干个小时去配置,ReadyNAS的安装和配置都非常简单。随产品附带的检测工具RAIDar,可以自动地在网络中发现设备。任何的工作站,只要有一个支持JAVA的浏览器即可管理ReadyNAS。

在现今竞争越来越激烈的商业环境中,对于机构来说,一种技术最重要的是能为自己所用而不是给自己带来麻烦。成长型的中小企业最容易由于选错了一种有缺陷的技术而受到影响。因为他们一般不会雇佣一位昂贵的专职IT人士去规划和维护设备。而当技术问题一旦发生,他们会发现需要浪费宝贵的商业活动时间来管理技术。NETGEAR的网络附加存储设备ReadyNAS家族是针对以上问题的最佳解决方案。因为它提供了集中式文件存取和打印服务、高安全性、额外的数据冗余保护和本地与远程按时间表的备份功能。这一系列的功能都可以通过Web界面轻松管理。


G. 存储服务器和文件服务器有什么关系

存储服务器和文件服务器一般都接入到本地局域网。
文件服务器主要作用是文件共享,打印共享等。
存储服务器的作用就是文件共享。
在这里文件服务器跟存储服务器定义有点交叉,似乎没必要配置两台这样的服务器了。
文件服务器之外又配了一台存储服务器,那你们肯定是觉得数据量会比较大,一台文件服务器160G或者320G可能不够,实际上的话,最佳的解决方法是扩大文件服务器的硬盘,或者将存储服务器当文件服务器(window server平台上几乎不需要配置,设置一些共享权限就可以了)
若是觉得这样还不能满足需求,那我的意见是一台文件服务器+一台小容量磁盘阵列柜(价格也不是很贵)。
希望我的回答能解决您的问题

胜蓝售前工程师。

H. 如何使用队列存储服务

若要执行存储操作,您需要一个 Windows Azure 存储帐户。可通过以下步骤创建存储帐户。(也可以使用 REST API 创建存储帐户。)

登录到 Windows Azure 管理门户。

在导航窗格的底部,单击“新建”。

+新建

依次单击“数据服务”、“存储”和“快速创建”。

“快速创建”对话框

在 URL 中,键入要在存储帐户的 URI 中使用的子域名称。输入的名称可包含 3-24 个小写字母和数字。此值将成为用于对订阅的 Blob、队列或表资源进行寻址的 URI 中的主机名。

选择要在其中查找存储的区域/地缘组。如果要使用 Windows Azure 应用程序中的存储,请选择要在其中部署该应用程序的区域。

还可以选择启用异地复制。

单击“创建存储帐户”。

创建 Java 应用程序

在本指南中,您将使用存储功能,这些功能可在 Java 应用程序中本地运行,或在 Windows Azure 的 Web 角色或辅助角色中运行的代码中运行。假定您已下载并安装 Java 开发工具包 (JDK),并已按照下载 Windows Azure SDK for Java 中的说明进行操作来安装 Windows Azure Libraries for Java 和 Windows Azure SDK,还在 Windows Azure 订阅中创建了 Windows Azure 存储帐户。您可以使用任何开发工具(包括“记事本”)创建应用程序。您只要能够编译 Java 项目和引用 Windows Azure Libraries for Java 即可。

配置您的应用程序以访问队列存储

将下列导入语句添加到要在其中使用 Windows Azure 存储 API 以访问队列的 Java 文件的顶部:

// Include the following imports to use queue APIs
import com.microsoft.windowsazure.services.core.storage.*;
import com.microsoft.windowsazure.services.queue.client.*;
设置 Windows Azure 存储连接字符串

Windows Azure 存储客户端使用存储连接字符串来存储用于访问数据管理服务的终结点和凭据。在客户端应用程序中运行时,必须提供以下格式的存储连接字符串,并对 AccountName 和 AccountKey 值使用管理门户中列出的存储帐户的名称和存储帐户的主访问密钥。此示例演示如何声明用于保存连接字符串的静态字段:

// Define the connection-string with your values
public static final String storageConnectionString =
"DefaultEndpointsProtocol=http;" +
"AccountName=your_storage_account;" +
"AccountKey=your_storage_account_key";
在 Windows Azure 的角色中运行的应用程序中,此字符串可存储在服务配置文件 ServiceConfiguration.cscfg 中,并可通过调用 RoleEnvironment.getConfigurationSettings 方法进行访问。下面是从服务配置文件中名为 StorageConnectionString 的 Setting 元素中获取连接字符串的示例:

// Retrieve storage account from connection-string
String storageConnectionString =
RoleEnvironment.getConfigurationSettings().get("StorageConnectionString");
如何:创建队列

利用 CloudQueueClient 对象,可以获得队列的引用对象。以下代码将创建 CloudQueueClient 对象。

本指南中的所有代码都使用声明了上述两种方式之一的存储连接字符串。还可以通过其他方式创建 CloudStorageAccount 对象。有关详细信息,请参阅 Javadocs 文档中的 CloudStorageAccount。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);

// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();
使用 CloudQueueClient 对象获取对要使用的队列的引用。如果队列不存在,您可以创建它。

// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");

// Create the queue if it doesn't already exist
queue.createIfNotExist();
如何:向队列添加消息

若要将消息插入现有队列,请先创建一条新的 CloudQueueMessage。紧接着,调用 addMessage 方法。可从字符串(UTF-8 格式)或字节数组创建 CloudQueueMessage。以下代码将创建队列(如果队列不存在)并插入消息“Hello, World”。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(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.createIfNotExist();

// Create a message and add it to the queue
CloudQueueMessage message = new CloudQueueMessage("Hello, World");
queue.addMessage(message);
如何:查看下一条消息

通过调用 peekMessage,可以查看队列前面的消息,而不必从队列中将其删除。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(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();
如何:取消对下一条消息的排队

您的代码通过两个步骤取消在队列中对消息的排队。在调用 retrieveMessage 时,您将获得队列中的下一条消息。从 retrieveMessage 返回的消息变得对从此队列读取消息的任何其他代码不可见。默认情况下,此消息将持续 30 秒不可见。若要完全从队列中删除消息,您还必须调用 deleteMessage。此删除消息的两步过程可确保当您的代码因硬件或软件故障而无法处理消息时,您的其他代码实例可以获取同一消息并重试。您的代码在处理消息后会立即调用 deleteMessage。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);

// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");

// Retrieve the first visible message in the queue
CloudQueueMessage retrievedMessage = queue.retrieveMessage();

// Process the message in less than 30 seconds, and then delete the message.
queue.deleteMessage(retrievedMessage);
如何:更改已排队消息的内容

您可以更改队列中已就位消息的内容。如果消息表示工作任务,则可以使用此功能更新工作任务的状态。以下代码使用新内容更新队列消息,并将可见性超时设置为再延长 60 秒。这将保存与消息关联的工作的状态,并额外为客户端提供一分钟的时间来继续处理消息。可使用此方法跟踪队列消息上的多步骤工作流,即使处理步骤因硬件或软件故障而失败,也无需从头开始操作。通常,您还可以保留重试计数,如果某条消息的重试次数超过 n 次,您将删除此消息。这可避免消息在每次处理时都触发应用程序错误。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);

// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");

// Retrieve the first visible message in the queue
CloudQueueMessage message = queue.retrieveMessage();

// Modify the message content and set it to be visible in 60 seconds
message.setMessageContent("Updated contents.");
EnumSet<MessageUpdateFields> updateFields =
EnumSet.of(MessageUpdateFields.CONTENT, MessageUpdateFields.VISIBILITY);
queue.updateMessage(message, 60, updateFields, null, null);
用于对消息取消排队的其他方法

您可以通过两种方式自定义队列中的消息检索。首先,您可以获取一批消息(最多 32 个)。其次,您可以设置更长或更短的不可见超时,从而允许您的代码使用更多或更少的时间来彻底处理每条消息。

以下代码示例使用 retrieveMessages 方法通过一次调用获取 20 条消息。然后,它使用 for 循环来处理每条消息。它还将每条消息的不可见超时设置为五分钟(300 秒)。请注意,这五分钟超时对于所有消息都是同时开始的,因此在调用 retrieveMessages 五分钟后,尚未删除的任何消息都将再次变得可见。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);

// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");

// Retrieve 20 messages from the queue with a visibility timeout of 300 seconds
for (CloudQueueMessage message : queue.retrieveMessages(20, 300, null, null)) {
// Do processing for all messages in less than 5 minutes,
// deleting each message after processing.
queue.deleteMessage(message);
}
如何:获取队列长度

您可以获得队列中消息的估计数。downloadAttributes 方法会询问队列服务一些当前值,包括队列中消息的计数。此计数仅为近似值,因为只能在队列服务响应您的请求后添加或删除消息。getApproximateMethodCount 方法返回通过调用 downloadAttributes 检索到的最后一个值,而不会调用队列服务。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(storageConnectionString);

// Create the queue client
CloudQueueClient queueClient = storageAccount.createCloudQueueClient();

// Retrieve a reference to a queue
CloudQueue queue = queueClient.getQueueReference("myqueue");

// Download the approximate message count from the server
queue.downloadAttributes();

// Retrieve the newly cached approximate message count
long cachedMessageCount = queue.getApproximateMessageCount();
如何:删除队列

若要删除队列及其包含的所有消息,请对队列对象调用 delete 方法。

// Retrieve storage account from connection-string
CloudStorageAccount storageAccount =
CloudStorageAccount.parse(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();