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

现在这样的工作量很大,可以养活很多人 IMAP 账户。我想利用 Akka 集群功能,它可以在网络中预定义的一组机器中运行这些作业,并在从以下位置获取数据时出现错误时进行重试: IMAP 主机。

我想创建一个将启动的 akka 集群 IMAP 获取工作(通过演员??!!)。

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

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

我该怎么办呢?

有帮助吗?

解决方案

我们大量使用 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 向空闲的 IMAP 工作人员发送一条 ProcessAccount 消息(一个包含 Gmail OAuth 令牌的自定义对象(您也可以使用传统的用户名和密码凭据))。
  4. IMAP 工作程序使用 JavaMail 来读取和处理新消息。出现错误时,它会向主管参与者发送一条 FailedProcessing 消息(一个包含错误代码和人类可读字符串的自定义对象)。成功后,它会发送 CompletedProcessing。
  5. 主管更新数据库中的用户记录,包括在处理失败时设置错误代码。
  6. 除了定期处理健康帐户外,主管还会重试处理失败的帐户。我们的用例是这样的,我们每天只尝试重新处理一次,但您可以更频繁地执行此操作。

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

其他提示

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top