Java实现电子邮件队列功能

3

我有一个数据库,其中的列是:

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

现在我想在Java中实现一个系统,用于访问这个未处理的数据库,发送邮件(我正在使用fakeSMTP进行测试)并将其设置为已处理。
虽然我还没有添加任何线程,但它已经足够好用了。
但问题是,为了加快处理速度,可能需要在多台服务器上部署,那么如何确保不会重复发送邮件?
如何使它更快?
1个回答

1
以下应该是解决您问题的方法:
  1. 每个服务器都应有一个唯一的ID

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

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

    update mails set server_id = <您的 server_id> where (server_id is null) and (<您的其他条件>)

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

  5. 如果记录的 server_id 不是 null,那么它的处理已经开始了。如果其 server_id 不为空且其 processedY,则已经被处理过。


如果我没有服务器ID怎么办? 现在我正在测试我的系统,所以无法获取服务器ID。现在,我可以传递随机值作为ID;但不确定在实际情况下会出现什么情况。 - codezero
如果您没有server_id,则创建一个。服务器应该有这样的设置,如果没有值,则生成一个并存储到数据库中,这样就不会有重复的server_id。因此,解决没有server_id的问题的方法是:创建server_id。 - Lajos Arpad
但如果我使用线程,在这种情况下使用服务器ID将无法解决问题。我仍然需要区分它们。 - codezero
你也可以添加线程ID。如果你在不同的服务器上使用单独的线程,你可以同时使用服务器ID和线程ID。 - Lajos Arpad
1
谢谢@Lajos。 这肯定是更好的方式。 - codezero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接