使用Azure存储队列处理清理作业

时间:2015-07-20 16:43:55

标签: azure azure-storage azure-storage-queues azure-scheduler

为了处理每8小时运行一次的清理作业,目前我们已经实现了:

  1. 使用Azure Scheduler创建预定作业,该消息在触发时将消息放入存储队列。
  2. 以这样一种方式实现客户端,即它将持续轮询并在收到消息时进行处理。客户端的示例实现是:

     while (!CancellationToken.Value.IsCancellationRequested)    
            {
    
             var message = await client.GetMessageAsync();
    
                if (message != null)
                {
                    // process the message
                }
    }
    
  3. 但问题是我们正在等待,即使我们知道我们只会在8小时后收到消息,并且根据文档,每次尝试从队列中读取消息都会产生费用。

    如何优化这一点,以便在每个可配置的时间而不是连续循环中动态生成侦听器?

1 个答案:

答案 0 :(得分:1)

您没有提及您的客户端是如何部署的,因此我希望以下策略之一可以帮助您进行优化。 如果您将客户端部署为云资源:您可以使用Azure自动化服务来安排云资源的启动/停止,例如:在消息出现在队列中之前启动云服务,并在完成后触发关闭。

如果您的客户端部署在本地:您当然可以使用Thread.Sleep来减少命中数

还要考虑Azure Service Bus,它允许您订阅消息/主题。