Java 的电子邮件队列实施

Email queue implementation with Java

我有一个数据库,其列为:

| from_email | to_email | subject | body | processed(Y/N) |

现在我想在 Java 中实现一个系统,它将访问此数据库以进行未处理,发送邮件 (我正在使用 fakeSMTP 进行测试) 和将其设置为已处理。

它工作得很好,虽然我还没有添加任何线程。

但问题是要加速它可能部署在多个服务器上的过程,在那种情况下我如何确保没有邮件被发送两次?

如何让它更快?

以下应该是您问题的解决方案:

  1. 每个服务器应该有一个唯一的id

  2. 将默认值为 null 的 server_id 添加到您的 mails table

  3. 当服务器打算发送邮件时,运行 查询,例如:

    update mails set server_id = <your server_id> where (server_id is null) and (<your other criteria>)

  4. 处理 update、select 行后,如果 server_id 具有预期值(未发生并发问题),则处理它

  5. 如果一条记录的server_id不是null,那么它的处理已经开始了。如果它的server_id不为null并且它的processedY,那么它已经被处理了。