如何在Web API中使用Azure CloudQueueClient?

时间:2018-04-27 03:02:23

标签: asp.net-web-api asp.net-web-api2 azure-storage-queues

我有一个在Azure中运行的ASP.NET Web API 2.0项目。 1000分钟的远程设备每分钟调用一次主要方法。似乎存在内存问题。 API启动时,内存加载量约为40%。在24小时内,这个爬升到80 +%,此时我重新启动服务并且内存下降到40%并且循环再次开始。这是一个相对较新的问题,因为连接的设备数量不断增加。我想已经达到了一些门槛。

远程设备调用的主要方法基本上是获取设备数据,并通过CloudQueueClient将其推送到Azure队列。在内存加载成为问题之前,我正在为每个调用创建一个新的CloudQueueClient。当我将其更改为全局CloudQueueClient时,内存问题似乎有所缓解 - 从40%到80%的时间增加了10倍。这就是为什么我认为我可能会使用CloudQueueClient和CloudQueue对象。

我使用以下方式推送设备数据:

 var queue = queueClient.GetQueueReference(queueName);
 await queue.AddMessageAsync(new CloudQueueMessage(message));

其中queueClient是我的全局CloudQueueClient实例。正如您所看到的,我仍然在每次调用时都创建了一个CloudClient实例。我是否应该为每次通话重复使用CloudClient实例。

我的问题很简单,在Web API应用程序的上下文中使用CloudQueueClient和CloudQueue的正确方法是什么?

请注意,我将传入的设备消息分布在多个队列中,以减轻每个队列的负载,从而不会受到限制。

1 个答案:

答案 0 :(得分:0)

设备不能直接将数据发送到队列而不是使用api作为中间人吗?有一个rest api可用。

同样this link可能会有所帮助:

  

您可以重复使用CloudQueue和CloudQueueClient实例。