以高效的方式写入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(工作者角色)中执行。
感谢。
答案 0 :(得分:5)
await theref.AddMessageAsync(themessage)
,而不是在单独的线程上阻止同步AddMessage
呼叫。CloudQueueClient
对象来获取对CloudQueue
的新引用。AddMessageAsync
,就会尽可能重复使用相同的连接。如果同时调用它,将创建更多连接,最多为ServicePointManager.DefaultConnectionLimit
个连接。因此,如果您希望并发访问队列,可能需要增加此数字。ServicePointManager.UseNagleAlgorithm
禁用Nagle算法。答案 1 :(得分:2)
我会缓存您的CloudQueue参考并重新使用它。每次向队列添加消息时,此类都使用HttpClient构造REST调用。由于您的凭据和存储/队列Uri已经知道,这可以节省几个周期。
此外,建议使用AddMessageAsync而不是AddMessage。
作为参考,您可以在存储客户端库here中看到实现。