3

以高性能方式写入 Azure 队列存储的正确调用/代码模式是什么?

现在,伪代码是

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

使用带有我的应用程序消息类型的输入参数的异步任务方法创建类。该方法序列化类型,创建新的 CloudQueueMessage、新的 CloudQueueClient、新的 CloudQueue 引用。如果需要配置信息,则从静态类中读取。然后我的代码:

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

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

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

所有想法都表示赞赏。

使用 .NET 4.5.2、C#。代码在云服务(工作者角色)中执行。

谢谢。

4

2 回答 2

5
  • 默认情况下,Azure 存储客户端库已经为你重试,以防出现服务/网络错误。每次操作最多会重试 3 次。
  • 您可以将调用更改为,await theref.AddMessageAsync(themessage)而不是阻塞AddMessage单独线程上的同步调用。
  • 从最新的库开始,您可以重用该CloudQueueClient对象来获得对CloudQueue.
  • 只要您AddMessageAsync按顺序调用,将尽可能重用相同的连接。如果您同时调用它,将创建更多连接,最多ServicePointManager.DefaultConnectionLimit连接。因此,如果您希望并发访问队列,您可能需要增加此数量。
  • ServicePointManager.UseNagleAlgorithm考虑到队列消息的大小,还建议禁用 Nagle 算法。
于 2015-06-23T18:43:13.967 回答
2

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

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

作为参考,您可以在此处查看存储客户端库中的实现。

于 2015-06-23T18:42:13.443 回答