0

我想启动一些任务,它将连接到一个IMAP并将电子邮件数据存储在数据库中。

现在这样的工作将有巨大的容量来支持许多IMAP帐户。我想利用 Akka 集群功能,它可以在网络中预定义的一组机器上运行这些作业,并在从IMAP主机获取数据时发生错误时重试。

我想创建一个 akka 集群,它将启动IMAPfetch 作业(通过 Actor ?? !! )。

IMAP是一个棘手的协议,它可能无法连接到远程主机。在这种情况下,参与者应该重试几次可配置的时间来连接和获取。

最终它应该充当我的IMAP取回后端。

我应该怎么做?

4

2 回答 2

2

我们大量使用 Akka,包括使用 JavaMail/IMAP 连接和处理来自用户电子邮件帐户的新消息。容错是这个难题的重要组成部分。以下是我们后端的大致设置方式:

  1. 主管节点有一个从数据库中选择用户进行处理的参与者
  2. IMAP 工作者参与者在准备好工作时通知主管(有关此“工作拉动”架构的更多信息,请参阅我的同事 Ryan Tanner 的博客文章:http: //blog.goconspire.com/post/64901258135/akka-at-conspire -part-5-the-importance-of-pulling )
  3. Supervisor 将 ProcessAccount 消息——一个包含 Gmail OAuth 令牌的自定义对象(您也可以使用传统的用户名和密码凭据)——发送给空闲的 IMAP 工作人员。
  4. IMAP 工作人员使用 JavaMail 来读取和处理新消息。发生错误时,它会将 FailedProcessing 消息(包括错误代码和人类可读字符串的自定义对象)发送回主管参与者。成功时,它发送 CompletedProcessing。
  5. 主管更新数据库中的用户记录,包括在处理失败时设置错误代码。
  6. 除了定期处理健康帐户外,主管还会重试处理失败的帐户。我们的用例是我们每天只尝试重新处理一次,但您可以更频繁地这样做。

使用 Akka 集群,我们将工作人员与主管分开。将这种方法与上述工作拉动机制相结合,使我们能够相对容忍工作人员中不可恢复的错误,例如 OutOfMemoryErrors。

于 2013-11-17T03:28:26.193 回答
0

使用 JavaMail。阅读JavaMail 常见问题解答

于 2013-11-17T02:22:19.107 回答