0

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

  1. 使用 Azure 调度程序创建计划作业,该调度程序在触发时将消息放入存储队列。
  2. 以这样一种方式实现客户端,即它会在收到消息时连续轮询并处理。客户端的示例实现是:

     while (!CancellationToken.Value.IsCancellationRequested)    
            {
    
             var message = await client.GetMessageAsync();
    
                if (message != null)
                {
                    // process the message
                }
    }
    

但问题是我们正在无限期地等待,即使我们知道我们只会在 8 小时后收到消息,而且根据文档,每次尝试从队列中读取消息都会产生成本。

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

4

1 回答 1

1

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

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

还可以考虑允许您订阅消息/主题的 Azure 服务总线。

于 2015-07-20T18:04:32.220 回答