3

为了进行基于时间的事件,最好的设计是什么?例如,例如在用户上次登录后 60 天左右向用户发送提醒?

该系统目前是基于 MVC5 构建的,因此我正在考虑在基本控制器的 ActionExecuted 中添加一些 cronjob,这将触发所有检查和内容并执行所有基于事件的任务。

我正在考虑的另一种方法是实际创建一个桌面应用程序(控制台应用程序)并让它一直运行,并在新用户注册时从 SQL 服务器获取推送通知,然后只保留列表并在 60 天后立即发送电子邮件,或每天查询一次服务器以获取每个人的最后登录日期,并在需要时为任何用户发送电子邮件。

我在 SO 上的另一个问题上 找到了这个( http://www.quartz-scheduler.net ): MVC - 即使没有人登录应用程序也运行计划任务

并想问这对于系统来说是否是一个更好的选择?

一个更好的例子是每个月都应该向一些用户发送一份时事通讯。那将如何实施?

4

1 回答 1

1

所以最后我最终使用了 Quartz.NET。我让 MVC 应用程序创建触发器和作业,并且一个单独的服务器运行一个控制台应用程序来执行触发器和作业。

这可以通过 Scheduler.Start(); 来实现。在控制台应用程序中,而不是在 Web 应用程序中。

此外,作业和触发器存储在 SQL 服务器 (Azure SQL) 而不是 RAM 上,因此两台机器都可以访问它们。

我还必须确保时钟与秒同步,并<quartz>在 Web.config 和 App.config 的配置部分更改一些变量:

 <add key="quartz.scheduler.instanceId" value="AUTO" />
 <add key="quartz.jobStore.clustered" value="true" />

两个系统都应该在一个集群中运行!

于 2015-05-05T03:41:37.303 回答