我有一个数据库,其列是:
| from_email | to_email | subject | body | processed(Y/N) |
现在我想用 Java 实现一个系统,该系统将访问此数据库以获取未处理的信息,发送邮件(我正在使用 fakeSMTP 进行测试)并将其设置为已处理。
它工作得很好,尽管我还没有添加任何线程。
但问题是要加快它可能部署在多个服务器上的过程,在那种情况下我如何确保没有邮件被发送两次?
如何让它更快?
最佳答案
以下应该是您问题的解决方案:
每个服务器都应该有一个唯一的id
添加默认值为
null
的server_id给你的mails
表格当服务器打算发送邮件时,运行查询,例如:
update mails set server_id = <your server_id> where (server_id is null) and (<your other criteria>)
处理完
update
之后,选择该行,如果server_id
有预期值(没有发生并发问题),然后处理它如果一条记录的
server_id
不是null
,那么它的处理已经开始了。如果它是server_id
不为空且其processed
是Y
, 则处理完毕。
关于java - 使用 Java 实现电子邮件队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29581954/