需要在Azure中的特定日期执行的任务

需要在Azure中的特定日期执行的任务,azure,scheduled-tasks,azure-queues,Azure,Scheduled Tasks,Azure Queues,我正在使用Azure云服务和web api开发一个应用程序。我希望允许创建咨询会议的用户更改该会议的价格,但是我希望允许所有用户在新价格影响当前已注册会议的所有成员的价格之前30天内离开会议。我的第一个想法是使用队列存储并将可见性超时设置为30天的时间限制,但这似乎会随着时间的推移使队列增长得非常快,特别是如果消息不应在30天内运行;更不用说订购问题了。我也在看任务调度程序,但是会话定价的变化不是一个重复出现的概念,而是更随机的。队列想法是一种好方法还是有更好更有效的方法来实现这一点?我认为这种

我正在使用Azure云服务和web api开发一个应用程序。我希望允许创建咨询会议的用户更改该会议的价格,但是我希望允许所有用户在新价格影响当前已注册会议的所有成员的价格之前30天内离开会议。我的第一个想法是使用队列存储并将可见性超时设置为30天的时间限制,但这似乎会随着时间的推移使队列增长得非常快,特别是如果消息不应在30天内运行;更不用说订购问题了。我也在看任务调度程序,但是会话定价的变化不是一个重复出现的概念,而是更随机的。队列想法是一种好方法还是有更好更有效的方法来实现这一点?

我认为这种情况更适合使用Azure调度器。以编程方式创建一个作业,该作业具有一次重复性,并将日期设置为30天后运行一次。调度程序自动触发此作业后,将一个操作分配给回调到您的某个API/服务,以执行价格和其他所需更新,并将此作业作为此操作的一部分从调度程序中删除,以获得干净的作业列表。无论如何,Azure调度器作业集合的高级计划将为您提供无限数量的作业以供运行


希望这正是你想要的……P/>我会考虑使用Azure WebPosits。WebJob基本上使您能够在Azure Web应用程序的上下文中运行.NET控制台应用程序。它可以按需连续运行,也可以响应重新出现的计划。如果您的处理要求较低,并且允许这样做,那么它们也可以在Web应用程序运行的同一进程中运行,以节省$$$,因为它们是免费的


您可以将WebJob安排为每天运行一到两次,然后检查情况并做出适当的反应。因为它实际上只是一个.NET工作者角色,所以您具有极大的灵活性。

您尝试做的事情应该使用关系数据库来完成。您可以使用时间戳记录会话的价格何时更改。我根本不会用排队来做这件事。队列更适合在分布式系统中传递消息。你的问题只是跟踪在什么时段和什么时候价格发生了变化。这些数据应该在数据库中建模。

请注意,Azure队列上的最大消息TTL为7天。我在比较队列存储和服务总线队列的文章中也注意到了这一点。在这个场景中,我唯一可用的选项是将作业放入数据库表并每天检查吗?这种方法似乎消耗了数据库的资源。你可以在这里看到Azure Scheduler的限制-这种方法似乎是最干净的,但在Azure环境中,我是否仍然需要每天运行该计划程序来查找所有更改?根据你的评论“会话定价更改不是一个反复出现的概念,而是更随机的“-听起来人们会使用您的API随机获取定价信息。我建议使用缓存来缓存当前价格,如果缓存已过期,则使用读通模式重新计算新价格。重新计算新价格后,将其放回缓存中,以便在下次调用时快速检索。您在缓存上设置的超时应该反映您希望在不重新计算最新价格的情况下运行的最长时间,每天几个小时可能就可以了。