1

我正在开发一个电子商务网站,我们正在尝试解决一个问题。客户完成订单后,她会收到三封电子邮件(全部相同)而不是一封。该网站在三台服务器上运行,我们认为这是问题所在,因为仅使用一台服务器会将一封电子邮件发送给客户。我想知道我们应该怎么做,这样用户将只收到一封电子邮件而不是三封电子邮件,我们仍将在三台服务器上运行该网站。提前致谢, Laziale

4

1 回答 1

0

为此,您不能指望数据库中的锁定提示。提示只是提示;无法保证锁定会按您的预期发生(假设这是 SQL Server)。一般来说,关系数据库就是这样,一个数据库。表不是一种排队机制,如果您尝试以这种方式使用它,您总会遇到问题。

尽管如此,为了实现不同的解决方案,我们必须确定是单个记录被添加到“队列”还是三个记录被添加。如果是第一个,并且只添加了一条记录但发送了三封电子邮件,那么解决方案很简单。不要使用数据库表作为队列,而是使用 Microsoft 消息队列 (MSMQ)。它们是 Windows Server 的一部分,至少从 2003 年就开始存在,甚至可以追溯到 2000 年。它们将为您提供一个专门为您要完成的任务而设计的实际队列。

如果将三个实际记录添加到数据库中的“队列”表中,则意味着存在代码问题。即使负载平衡器中有三台 Web 服务器,事实仍然是单个订单提交仅发生在其中一台服务器上。将电子邮件通知放入队列的业务逻辑不能来自多个服务器,因为请求仅源自一台服务器。

我会先检查表格并确定是否添加了多条记录。如果不是,请将实现更改为使用 MSMQ。如果是这样,请检查您的代码以了解为什么在请求中添加了多个记录。

于 2012-07-09T22:30:27.033 回答