【问题标题】:ASP.Net scheduling timed events for large scale systemsASP.Net 为大型系统调度定时事件
【发布时间】:2011-01-24 15:11:42
【问题描述】:
拥有数百个甚至数千个定时事件的最佳做法是什么?
我有一个基于 C# ASP.Net Web 的应用程序,该应用程序位于 Microsoft Exchange 和另一个基于 Web 的服务之间。 Exchange 每小时检查一次用户约会,然后这些约会需要转发到另一个基于 Web 的服务,但不是立即。应该根据与约会的距离来转发它们,所以说在约会开始前 15 分钟。我正在考虑为此使用计划任务,但我不确定系统如何支持大量用户?
检查 Exchange 并不是真正的问题,但是根据从 Exchange 获取的数据触发另一个事件有点棘手。我看过 Quartz.Net,也许这会有所帮助。我很好奇人们能想到的其他设计解决方案以及我当前设计的问题。当然,在理想情况下,Exchange 插件将是首选解决方案,但目前还不是真正的选择。
感谢收听!
【问题讨论】:
标签:
c#
asp.net
exchange-server
scheduled-tasks
quartz-scheduler
【解决方案1】:
也许更好的解决方案是将事件存储在暂存区域中,并每分钟查询该表并将相关事件推送给用户。这意味着你每分钟只查询一次,但我不确定你如何回推给用户。
这远不是一个经过深思熟虑的选项,但可能足以让您思考不同的方向。
【解决方案2】:
应用程序可能不应该是 Web 应用程序 - 理想情况下应该是 Windows 服务,但我很欣赏它不一定那么简单,因此您需要确保您触发的所有代码都是自包含的,并且最低限度地依赖于托管应用程序。
我认为在发送数据方面,我可能会这样做:
1)获取交换处理以确定每个项目应该发生转发的时间 - 所以你有一个表,其中有一列“发送于”和另一个“发送”。
2)然后您每分钟运行一个进程,说明发送所有未发送的内容,这些内容现在应该发送。轻微的问题是,如果它超限,您需要立即再次运行它 - 如果它持续超限,您就会遇到容量问题。
关于这一点的要点是它非常非常简单 - 您有一个交换流程正在执行明确定义的任务,并且您有一个高频任务没有做任何特别复杂的事情,它是一个简单的查询(从表中选择where sent = false and send at