我想在我的 Windows azure 应用程序中实现一个作业调度程序。
我的目标是在每天的特定时间执行特定的应用程序。对于那个实现,我有一些选择
1-使用 Quartz.net
2-Windows 调度程序
如果 C#.net 中有任何可用的内置方法来实现它。我很难理解 Windows Azure HPC 调度程序。是调度程序吗?
作业调度程序功能最近添加到 Windows Azure 中,允许您轻松地按特定时间间隔安排作业:
这是一篇博客文章,解释了如何使用这些作业与网站、Web 角色甚至 Worker 角色进行通信:http: //fabriccontroller.net/blog/posts/job-scheduling-in-windows-azure/
当您在 Windows Azure 中进行调度时,您需要牢记一些事情。您可以拥有多个 Web/Worker 角色实例,这意味着您必须考虑到您的计划任务可能会运行多次,而这可能不是您想要的。
您可以考虑使用服务总线队列创建调度系统。BrokeredMessage类有一个有趣的属性,称为ScheduledEnqueueTimeUtc,允许您安排消息何时应入队(可用)。例如,这将允许用每小时显示的消息填充队列。
如果您决定使用服务总线队列构建这样的实现,您可以决定最多处理一次消息(ReceiveAndDelete)或至少一次(PeekLock)。
虽然之前已经多次回答了日程安排(这就是为什么我建议这是重复的),但我意识到您问了一些尚未解决的具体问题:
请查看我提到的另一个答案,因为我在那里提供了一个答案,为您提供了有关创建调度程序的详细信息。
如果您使用 ScheduledEnqueueTimeUtc 属性来延迟消息排队,我想知道消息在发送到队列之前存放在哪里?因为如果您有 2 个 Web/Worker 角色实例,会发生什么?
两种情况: 1. - InstanceA 将消息存储在其缓存中,等待将其传递到队列 - InstanceA 因任何原因失败。- 消息永远丢失。
在这两种情况下,似乎解决方案都不可靠..