2015年的Azure队列存储正确呼叫模式?

时间:2015-06-23 15:38:45

标签: azure azure-storage-blobs azure-storage-queues retrypolicy

以高效的方式写入Azure Queue Storage的正确呼叫/代码模式是什么?

现在,伪代码是

使用StorageCredentials和CloudStorage帐户属性创建静态类。在应用程序启动时,将配置文件中的值读入{get;} - 仅属性。

使用async Task方法创建具有我的应用程序消息类型的输入参数的类。该方法序列化类型,创建新的CloudQueueMessage,新的CloudQueueClient,新的CloudQueue引用。在需要配置信息的地方,从静态类中读取。我的代码然后:

await Task.Run( ()=> theref.AddMessage(themessage).

在我看来,好像我在代码中有一些冗余,并且不确定是否/如何将连接汇集到队列中,以及我是否需要重试逻辑,就像我对数据库(SQL Server等)的连接一样

我试图了解哪些队列访问步骤可以以任何方式减少或优化。

所有想法都受到赞赏。

使用.NET 4.5.2,C#。代码正在Cloud Service(工作者角色)中执行。

感谢。

2 个答案:

答案 0 :(得分:5)

  • Azure存储客户端库在服务/网络错误的情况下默认为您重试。每次操作最多重试3次。
  • 您可以将呼叫更改为await theref.AddMessageAsync(themessage),而不是在单独的线程上阻止同步AddMessage呼叫。
  • 从最新的库开始,您可以重复使用CloudQueueClient对象来获取对CloudQueue的新引用。
  • 只要您按顺序呼叫AddMessageAsync,就会尽可能重复使用相同的连接。如果同时调用它,将创建更多连接,最多为ServicePointManager.DefaultConnectionLimit个连接。因此,如果您希望并发访问队列,可能需要增加此数字。
  • 根据队列消息的大小,还建议通过ServicePointManager.UseNagleAlgorithm禁用Nagle算法。

答案 1 :(得分:2)

我会缓存您的CloudQueue参考并重新使用它。每次向队列添加消息时,此类都使用HttpClient构造REST调用。由于您的凭据和存储/队列Uri已经知道,这可以节省几个周期。

此外,建议使用AddMessageAsync而不是AddMessage。

作为参考,您可以在存储客户端库here中看到实现。