|
|
51CTO旗下网站
|
|
移动端

3.2.5.2 开发应用

《Microsoft Azure 管理与开发(下册)平台服务PaaS》本书由世纪互联蓝云Microsoft Azure 开发技术支持团队的资深工程师们编写,主要阐述MicrosoftAzure PaaS 服务的开发应用,涉及计算服务、集成认证服务、数据存储服务、大数据服务等方面的内容。本节为大家介绍开发应用。

作者:世纪互联蓝云公司来源:电子工业出版社|2018-07-13 11:55

3.2.5.2 开发应用

本文使用.NET 存储客户端构建应用示例,涉及的内容包括客户端连接、在队列中插入消息、扫视下一条消息、更改已排队消息的内容、取消对下一条消息的排队、使用其他方法取消对消息的排队、获取队列长度、删除队列。

1. 客户端连接

客户端API 提供了丰富的接口,连接方式也有多种方法,常用的连接操作示例代码如下:

  1. CloudStorageAccount storageAccount = CloudStorageAccount.Parse(  
  2. CloudConfigurationManager.GetSetting("connection string"));  
  3. CloudQueueClient queueClient = storageAccount.CreateCloudQueueClient(); 

2. 创建队列

若要创建队列,可以调用Create 或CreateIfNotExists 方法:

  1. CloudQueue queue = queueClient.GetQueueReference("myqueue");  
  2. queue.CreateIfNotExists(); 

3. 在队列中插入消息

若要将消息插入现有队列,请先创建一个新的CloudQueueMessage。接下来,调用AddMessage 方法。可从字符串(UTF-8 格式)或字节数组创建 CloudQueueMessage。以下代码将创建队列并插入消息“Hello, World”:

  1. CloudQueueMessage message = new CloudQueueMessage("Hello, World");  
  2. queue.AddMessage(message); 

4. 扫视下一条消息

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

  1. CloudQueueMessage peekedMessage = queue.PeekMessage();  
  2. Console.WriteLine(peekedMessage.AsString); 

5. 更改已排队消息的内容

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

这可避免每次处理某条消息时都触发应用程序错误。

  1. CloudQueueMessage message = queue.GetMessage();  
  2. message.SetMessageContent( " Updated contents. " ); queue.UpdateMessage  
  3. (message,TimeSpan.FromSeconds(60.0),  
  4. MessageUpdateFields.Content | MessageUpdateFields.Visibility); 

6. 取消对下一条消息的排队

通过两个步骤来取消对队列中某条消息的排队。调用 GetMessage 时,将获取队列中的下一条消息。从GetMessage 返回的消息变得对从此队列读取消息的任何其他代码不可见。在默认情况下,此消息将持续 30 秒不可见。若要从队列中删除消息,须调用DeleteMessage。

  1. CloudQueueMessage retrievedMessage = queue.GetMessage();  
  2. //在30 秒内处理该消息,然后删除  
  3. …  
  4. queue.DeleteMessage(retrievedMessage); 

7. 使用其他方法取消对消息的排队

可以通过两种方式自定义队列中的消息检索。首先,可获取一批消息(最多32 条)。其次,可以设置更长或更短的不可见超时时间,从而允许代码使用更多或更少时间来完全处理每个消息。以下代码示例使用GetMessages 方法在一次调用中获取20 条消息。然后,使用foreach 循环处理每条消息。将每条消息的不可见超时时间设置为5 分钟。请注意,5分钟超时时间对于所有消息都是同时开始的,因此在调用GetMessages 5 分钟后,尚未删除的任何消息都将再次变得可见。

  1. foreach (CloudQueueMessage message in queue.GetMessages(20, TimeSpan.  
  2. FromMinutes(5)))  
  3. {  
  4. //在5 分钟内处理该消息,然后删除  
  5. …  
  6. queue.DeleteMessage(message);  

8. 获取队列长度

可以获取队列中消息的估计数。使用FetchAttributes 方法可请求队列服务检索队列属性,包括消息计数。ApproximateMessageCount 属性返回FetchAttributes 方法检索到的最后一个值,而不会调用队列服务。

  1. queue.FetchAttributes();  
  2. int? cachedMessageCount = queue.ApproximateMessageCount;  
  3. Console.WriteLine("Number of messages in queue: " + cachedMessageCount); 

9. 删除队列

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

  1. CloudQueue queue = queueClient.GetQueueReference("myqueue");  
  2. queue.Delete(); 


喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

Oracle 10g应用指导与案例精讲

本书作者结合自己多年实践经验,从Oracle开发应用中遇到的问题着手,全面系统地介绍Oracle的安装与卸载、数据字典、安全管理以及用PL/SQL开...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊