在应用程序池中运行我的邮件队列错误吗
本文关键字:队列 错误 我的 运行 应用 应用程序 程序池 | 更新日期: 2023-09-27 18:27:38
我们必须自动发送电子邮件。它们需要可靠地调度,所以我们将它们写入数据库。同时,在Application_Start
启动的System.Threading.Timer
每隔30秒调用一个方法来读取数据库,然后发送并删除已发送的条目。这些都不是作为长时间运行的任务发生的。我们注意确保清除数据库队列的过程使用异步方法,因此发送/排队的任何阶段都不会阻塞,整个过程都由ThreadPool
中的短命方法执行。应用程序回收的成本也很低(可能导致重新发送一封电子邮件……不是问题)。
传统观点认为,在网络应用程序中运行这个并不好,我应该把它转为一个服务。
写作服务是一个PITA。如果可能的话,我宁愿避开它。那么,为什么我不应该在我的应用程序池中运行一个高效的异步邮件队列呢?有人能启发我吗?
如果您的网站没有使用,您的应用程序池将不会启动,也不会发送邮件。
写作服务是PITA
我想这是主观的。然而,你不认为把它放在服务中是有益的吗?如果您想更改实现,根据我的经验,维护较小的单个组件会容易得多。当你把所有东西都放在一个地方时,它通常更像是一个PITA。
您已经在将电子邮件写入数据库。编写一个简单的Windows服务非常简单,它只需扫描数据库并发送电子邮件。我知道这可能并不理想,但在SO和其他地方有很多例子。您不必花里胡哨地使用ESB(除非您愿意)。
所以最终,仅仅因为你可以并不意味着你你必须权衡成本和收益。