在我正在开展的项目中,用户可以订阅自己的课程。课程的持续时间是可变的,以周计算(因此4周,5周或6周)。他们可以在任何给定时刻订阅,因此每个用户的开始日期不同。
现在我想在每周开始时向用户发送个性化电子邮件(因此当他们进入第2周,第3周等时)。电子邮件每周都不同。
我知道我必须定期编写任务并安排,但我不确定如何选择正确的用户。我可以编写一个SQL命令,选择开始日期分别为7天,14天,21天或28天的所有用户,并计算他们在哪一周,但这似乎很容易出错(如果任务失败,那么他们不会在下一个任务周期中收到消息。
实现这一目标的最佳方式是什么?
该项目是C#中的ASP.NET MVC应用程序,IIS上有NHibernate。
答案 0 :(得分:1)
您正在讨论在未来日期和时间安排工作流程。这最好由调度程序处理。
概念上,您可以定义需要完成的工作以及何时需要完成。由于IIS将关闭网站,如果在IIS内托管此进程的站点上没有用户不是一个好主意。 Windows服务将是一个更好的选择。这样,它总是运行后台准备执行命令。调度程序的实现可以简单到将操作存储在数据库中,并在定时间隔内查询数据库,执行应该发生的任务。
另一种选择是将调度框架集成到您的服务中,如quartz.net。
修改强> 你目前想象的是对应该发生什么的隐含定义。换句话说,在发送提醒时,您可以计算何时以及应该通知谁。
在用户注册课程时计算这些值,并将其保存为显式事件。您需要的所有东西都已存储在事件中,剩下的就是确定应触发哪些事件。这应该很容易:任何应该已经解雇的事件,但没有。一旦它发射就会删除该事件。