Akka Cluster在Java中使用Java Mail API进行IMAP提取

时间:2013-11-16 18:45:54

标签: java javamail imap akka akka-cluster

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

现在这样的工作量很大,可以支持很多IMAP个帐户。我想利用Akka集群功能,这些功能可以在网络中的预定义机器集中运行这些作业,并在从IMAP主机获取数据时进行重试,以防止出现错误。

我想创建一个akka群集,它会启动IMAP抓取工作(通过Actor ?? !!)。

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

最终它应该作为我的IMAP提取后端。

我应该怎么做?

2 个答案:

答案 0 :(得分:2)

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

  1. Supervisor节点有一个actor,用于从DB中选择用户进行处理
  2. IMAP工作人员在他们准备好工作时通知主管(有关此问题的更多内容"工作拉动"架构,请参阅我的同事Ryan Tanner的博文:http://blog.goconspire.com/post/64901258135/akka-at-conspire-part-5-the-importance-of-pulling
  3. Supervisor向闲置的IMAP工作人员发送ProcessAccount消息 - 包含Gmail OAuth令牌的自定义对象(您也可以使用传统的用户名和密码凭据) -
  4. IMAP工作者使用JavaMail来读取和处理新消息。如果出现错误,它会向主管演员发送FailedProcessing消息(包括错误代码和人类可读字符串的自定义对象)。成功时,它发送CompletedProcessing。
  5. 主管更新数据库中的用户记录,包括在处理失败时设置错误代码。
  6. 除了定期处理健康帐户外,主管还会重试失败帐户的处理。我们的用例是这样的,我们每天只尝试重新处理一次,但你可以更频繁地这样做。
  7. 使用Akka群集,我们将工作人员与主管分开。将这种方法与上述工作牵引机制相结合,使我们能够相对容忍不可恢复的错误,例如: OutOfMemoryErrors,在工人中。

答案 1 :(得分:0)

使用JavaMail。阅读JavaMail FAQ