如何为从Gmail服务器读取电子邮件的Java应用程序设计故障转移

如何为从Gmail服务器读取电子邮件的Java应用程序设计故障转移,java,architecture,Java,Architecture,我正在开发一个基于Java的应用程序,它从Gmail服务器读取电子邮件并存储在数据库中以供进一步处理 以下是我收到电子邮件的步骤 我有一个电子邮件id为'testemail@gmail.com 使用java电子邮件API代码,我读取所有电子邮件并将其存储到数据库中,稍后,这些电子邮件将进行评估 读取电子邮件代码仅在一台服务器上运行 我在第二台服务器上部署了这个代码库,但两台服务器都在读取相同的电子邮件并存储在数据库中,因此我在数据库中有重复的电子邮件我想避免这种情况,同时,我需要一个读取电子邮件

我正在开发一个基于Java的应用程序,它从Gmail服务器读取电子邮件并存储在数据库中以供进一步处理

以下是我收到电子邮件的步骤

  • 我有一个电子邮件id为'testemail@gmail.com
  • 使用java电子邮件API代码,我读取所有电子邮件并将其存储到数据库中,稍后,这些电子邮件将进行评估
  • 读取电子邮件代码仅在一台服务器上运行

  • 我在第二台服务器上部署了这个代码库,但两台服务器都在读取相同的电子邮件并存储在数据库中,因此我在数据库中有重复的电子邮件我想避免这种情况,同时,我需要一个读取电子邮件的故障切换,因为如果一台服务器出现故障,那么我就有第二台服务器从Gmail服务器读取电子邮件。

    第一步,你必须建立一种机制,阻止一台服务器在另一台服务器阅读电子邮件时访问GMail收件箱。您可以使用数据库表中的条目,或共享文件夹中的文件,或Zookeeper或其他任何内容

    IMAP协议(也不是POP3协议)不知道“记录锁定”之类的东西,甚至不知道更高级别上的锁定,因此没有来自该方的支持。您甚至无法获得当前有多少客户端连接到给定邮箱的信息(至少不使用IMAP或POP3协议,我也不知道谷歌API会告诉您GMail帐户的连接情况)

    接下来,您将已处理的电子邮件标记为已在收件箱中阅读(后续的阅读尝试将忽略已阅读的电子邮件)。或者,您可以将处理过的电子邮件移动到邮箱上的专用IMAP文件夹中


    如果您只是想进行故障转移(另一台服务器是冷的),那么您必须在服务器级别上解决这个问题;这同样与邮箱访问无关。

    如果数据库服务器停机怎么办?那么故障转移就没用了。@Kayaman:一个接一个地解决问题怎么样?谁告诉你他们不使用RAC的?