我正在开发电子邮件广告系列模块,用户可以在其中创建带有一些条件选择的EmailCampaign,并可以向成千上万的用户发送电子邮件。
现在我已经找到了两种实现方式,但需要知道哪种方法更好用:
1)第一个Windows服务会在n个间隔内持续检查数据库,并在电子邮件队列表中插入数据,以便符合条件的电子邮件广告系列和第二个服务从队列中获取大约1000个记录并发送它们。
2)在Web应用程序中,在应用程序启动时,创建所有创建的电子邮件活动,并使用quartz(或任何其他后台作业帮助程序)在指定时间执行(生成队列以及发送电子邮件)。在这种方法中,我认为它可能会创建内部线程,它会影响Web应用程序的工作吗?
答案 0 :(得分:0)
方法#1:与系统分开。应用程序本身没有负载。但请定期清理您的数据库。对电子邮件表使用UniqueIdentifier ID而不是标识,以便清除数据不会导致丢失间歇性数字。您应该只在数据库中保留电子邮件模板。在运行时将其绑定到数据并发送邮件。这取决于要求,但您是否需要始终为活动数据库中的每个人保留已发送的邮件。
方法#2:它在任何情况下都会对Web应用程序的内存消耗产生影响,并可能降低应用程序的速度。有多个服务器还是一个?如果有多个,他们将处理相同的数据并发送多个邮件用于相同的东西。实例如何在它们之间同步。您可能需要在实例之间分区数据。或者他们还会在运行时使用SQL数据库来获取要处理的数据。如果只有服务器,这将无任何问题地运行。
如果数据库中有可用数据,如果电子邮件中不需要格式化,您还可以计划使用SQL数据库。 SQL作业将更好地处理它。
此外,您可以通过多个时间运行Windows任务调度程序的powershell脚本/ windows exe来执行此操作,该脚本连接到数据库并发送邮件。
您还可以在.net中使用Hangfire进行后台处理。保持较低的后台内存消耗并使用适当的错误处理。
答案 1 :(得分:0)
除非有一些操作/业务会让#1感到痛苦,否则我会选择#1,因为以下内容......
如果业务人员希望更改电子邮件格式(例如将徽标放在左侧而不是右侧,请将取消订阅文本设为蓝色而不是绿色...),创建广告系列的人员将不会遇到任何问题停机时间。
如果广告系列制作人员创建的广告系列针对大量用户,则不会放慢广告系列。
如果你想调整发送电子邮件的选项(例如玩负载分配,使用不同的服务器来处理不同的东西等),你就不必通过部署新版本的webapp来打断你的应用程序用户有新的调整
YMMV