【问题标题】:Select users for sending a weekly update [closed]选择用户发送每周更新[关闭]
【发布时间】:2012-02-07 23:43:24
【问题描述】:

在我正在进行的项目中,用户可以自己订阅课程。课程的持续时间是可变的,以周计算(因此 4、5 或 6 周)。他们可以随时订阅,因此每个用户的开始日期都不同。

现在我想在每周初向用户发送一封个性化的电子邮件(所以当他们进入第 2 周、第 3 周等时)。电子邮件每周都不一样。

我知道我必须编写一个任务并定期安排它,但我不确定我应该如何选择正确的用户。我可以编写一个 SQL 命令,选择开始日期为 7、14、21 或 28 天前的所有用户,并计算他们所处的周数,但这似乎很容易出错(如果任务失败怎么办,然后他们将不会在下一个任务周期中收到消息)。

实现这一目标的最佳方法是什么?

该项目是 C# 中的 ASP.NET MVC 应用程序,在 IIS 上具有 NHibernate。

【问题讨论】:

  • "如果任务失败,那么他们将不会在下一个任务周期中收到消息" 如果您想自动恢复,那么您应该选择过去 28 天内开始的所有用户,即使如果不完全是 7,则登录一个单独的表“在 Y 日期发送用户电子邮件 X”,然后检查是否有任何未完成的电子邮件要发送。或者制作该手册:向管理员发送任何故障警报,然后在当天介入并修复它。

标签: .net asp.net-mvc scheduled-tasks scheduling


【解决方案1】:

您正在谈论安排在未来日期和时间发生的工作流程。这最好由调度程序处理。

从概念上讲,您定义需要做什么以及何时需要完成。由于 IIS 将关闭网站,如果网站上没有用户在 IIS 中托管此进程,这不是一个好主意。 windows服务会是更好的选择。这样它总是在后台运行以准备执行命令。

调度程序的实现可以很简单,例如将操作存储在数据库中,并按时间间隔查询数据库,执行应该发生的任务。

另一种选择是将调度框架集成到您的服务中,例如 quartz.net

编辑: 您当前的设想是对应该发生的事情的隐含定义。换句话说,在发送提醒时,您会计算应该通知的时间和对象。

而是在用户注册课程时计算这些值并将其保存为显式事件。您需要的一切都已经存储在事件中,剩下的就是确定应该触发哪些事件。这应该很容易:任何应该已经触发但没有触发的事件。一旦触发就删除事件。

【讨论】:

  • 感谢您的回复,但我的主要问题更多是关于用户的选择,而不是调度部分。但是设置 Windows 服务确实比 IIS 进程更好。并且thanx 链接到Quartz,看起来很有趣。
  • 我最终在您的编辑中使用了您的建议。谢谢
猜你喜欢
  • 2012-10-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-11
  • 2016-09-18
  • 2012-09-10
  • 2018-08-30
  • 1970-01-01
  • 2019-11-09
相关资源
最近更新 更多