繁体   English   中英

发送日期驱动消息的 C# Windows 服务的设计模式

[英]Design Patterns for C# Windows Services that send date driven messages

为简单起见,我将使用向大约 1,000,000 名客户(存储在数据库中)的客户群发送生日电子邮件的场景,因为我自己尝试解决的场景与此类似。

通常,我设计的解决方案是创建一个使用 Quartz.net 调度的 Windows 服务,它将轮询整个客户表(尽管已编制索引),以寻找与今天日期(或服务运行时)匹配的生日。 该服务将循环访问客户列表并发送电子邮件等。这将被安排为每天运行一次。

我想知道这是解决这个问题的正常方法,还是有更好的方法/不同的模式? 轮询数据库给我感觉……有点臭……

我在想,既然我们在客户注册时就知道他们的生日(例如,他们的生日可能在几周后),我应该在注册时主动设置时间表来运行?

我试图避免的一件事是当我们知道那天没有任何生日时轮询数据库(好吧,在 1,000,000 名客户中,您希望有几个!...但让我们假装在那里整整一个月都没有……) - 什么解决方案可以避免这个问题?

谢谢

如果您计划每天进行一次数据库调用,我不会实施 Windows 服务。 由 Task Scheduler 触发的控制台应用程序就足够了。

如果您沿着每天一次的路线走 - 为什么不完全在数据库中执行此操作。 创建一个执行您的 sql 的作业并从 SQL Server 发送电子邮件(假设您使用的是 SQL Server)。

正如您提到的,您可以在客户注册时设置时间表。 如果你走这条路,你可以用SqlDependancy检测更改,然后在 OnDependencyChange 事件中创建一个计划。

void OnDependencyChange(object sender, SqlNotificationEventArgs e )
{
  // Create schedule.
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM