我的数据库中有一个名为提醒的表。所以一行可能看起来像
Id Subject Time
1 "Foo" 2014-14-03 13:30:00
然后我想发送一封关于2014-14-03 13:30:00
的电子邮件。这样做的最佳方法是什么?我能想到的唯一解决方案是每分钟查询一次数据库,看看我需要发送哪些电子邮件。现在我需要一个Windows服务和我的网站,因为Windows服务需要不断运行。我认为可能有更好的解决方案。
答案 0 :(得分:2)
您可以使用Quartz.NET等库,并在服务启动时定期阅读您的表格。
答案 1 :(得分:1)
我可以像Queue一样思考。只是一个想法。好吧,不仅是一个队列,就像一个队列和一个堆叠在一起,由你创建的东西。
这样,如果您添加时间少于第一个任务的新任务,则可以将此任务放在第一个位置。
您可以创建一个队列/堆栈,然后将一个新元素排入队列,并启动一个Timer(或一个计数器),它具有现在的时间和包含的任务的时间之间的差异。这样您只需要检查其中一个任务。
然后,当现在的时间等于队列中的第一个任务时,将此任务出列队列,并对新任务执行相同的操作。如果Queue为空,则不需要对数据库执行任何操作,只检查第一个任务中的时间。
我希望这会有所帮助。
答案 2 :(得分:0)
我会使用NServiceBus,并且有一个循环传奇,它从数据库读取并将本地消息发送回总线,用于发生需要发生的每件事,例如发送电子邮件' '运行此脚本'然后为每种消息类型处理程序。在这里查看第110行,这是它循环的方式:
我能想到的其他方式是:
HTH, 埃里克
答案 3 :(得分:0)
您只需要经常查询数据库即可。如果您从未插入请求在下一小时内运行新任务的行,那么您可以每小时检查一次服务查询,查看下一小时内要运行的任务列表,并将结果缓存到内存中。
如果您不断添加需要立即或很快运行的新任务,则必须经常查询数据库。
或者,如果允许在SQL Server主机上运行程序,则可以编写执行INSERT
的存储过程然后执行程序(执行任务或通知远程主机执行任务)使用xp_cmdshell
命令: