【问题标题】:Handling Cleanup jobs using Azure storage Queues使用 Azure 存储队列处理清理作业
【发布时间】:2015-10-09 21:29:34
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


【解决方案1】:

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

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

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

【讨论】:

  • 感谢您的回复。客户端部署为云资源。无法使用 Azure 服务总线,因为如果服务总线不可用,此策略可用作回退。也不能使用自动化,因为同一个云服务托管不同的作业,这将创建不同的侦听器,其中只有少数是我们不应该无限期等待的背景。
  • 好的。您还可以尝试将执行不同作业的复合云服务转换为多个独立的微服务,以后可以使用 WebJobs/Automation/WebAPI 独立部署和调度。
  • 不能使用微服务,因为 Service Fabric 的实现离我们的范围很远。
猜你喜欢
  • 2015-05-06
  • 1970-01-01
  • 2015-05-05
  • 2018-08-28
  • 2022-01-27
  • 1970-01-01
  • 2017-09-07
  • 1970-01-01
相关资源
最近更新 更多