java - 使用 Java 实现电子邮件队列

标签 java mysql email smtp jakarta-mail

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

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

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

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

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

如何让它更快?

最佳答案

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

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

  2. 添加默认值为null的server_id给你的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 , 则处理完毕。

关于java - 使用 Java 实现电子邮件队列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29581954/

相关文章:

python - 如何在 SQLAlchemy 中定义基类中的表列和子类中的表名称?

Java邮件: attach html content along with an attachment

java - 使用不同的邮件 api jar 降低 sendmail 性能 (javamail)

php - 如何检索和处理 Gmail 数据

java - 所采用的点是 gradle 脚本中的正斜杠

mysql - 如何获取 SQL DUMP 并修改它以适应不同的数据库表结构?

java - 将 OpenID 选择器与 Spring Security 结合使用

mysql - SQL 连接 2 个表 - 在第二个连接的列上排序不同的结果

java - Java 伪代码中所附 UML 图的解释?

java - 无法访问 MS Project Server 2013 REST API 服务器 - 授权错误