使用Java实现电子邮件队列

时间:2015-04-11 19:13:25

标签: java mysql email smtp javamail

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

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

现在我想用Java实现一个系统,该系统将访问此数据库而不进行处理,发送邮件(我使用fakeSMTP进行测试)并将其设置为已处理。

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

但问题是如何加快可能在多台服务器上部署的程序,在这种情况下,如何才能确保没有邮件被发送两次?

怎样才能更快?

1 个答案:

答案 0 :(得分:1)

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

  1. 每个服务器都应具有唯一ID

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

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

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

  4. 处理完update后,选择行,如果server_id具有预期值(没有发生并发问题),则处理它

  5. 如果记录server_id不是null,则其处理已经开始。如果其server_id不为空且其processedY,则表示已对其进行处理。