【问题标题】:Akka Cluster In Java for IMAP fetch using Java Mail APIAkka Cluster In Java 使用 Java Mail API 获取 IMAP
【发布时间】:2013-11-16 18:45:53
【问题描述】:

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

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

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

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

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

我应该怎么做?

【问题讨论】:

    标签: java jakarta-mail imap akka akka-cluster


    【解决方案1】:

    我们大量使用 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,在工作人员中。

    【讨论】:

    • 感谢您概述该方法,因为您已经解决了类似的问题。但是你有一些代码可以参考吗,我是一个 Akka Noob :(
    • 请尊重一点:Paul 花了很长时间来写一篇非常详细的文章。如果您希望有人为您工作,那么您必须为此付费。
    • @RolandKuhn 我明白你的意思,我从不想要完整的源代码。只是一些有类似参考的开源存储库。我当然感谢保罗给出的详细回答。我已经投票支持它以遵守 SO 规则。我可以看到 Akka 项目的负责人自己在答案下方发表评论,我现在必须接受它:) 感谢您注意到这个问题。
    • 谢谢罗兰。 Rakesh,恐怕我不能分享比 Ryan 已经在博客上发布的代码更多的代码了,但是那里有一些好东西。 (请注意,上面的链接是五篇文章中的第五篇,大部分与 Akka 相关。)
    【解决方案2】:

    使用 JavaMail。阅读JavaMail FAQ

    【讨论】:

    • 比尔!感谢您的指点,我见证了您之前对我的java邮件相关问题的及时回复。我已经知道如何使用 Java Mail API 获取电子邮件。我的问题更多是关于将它与 Akka 技术一起使用。 :)
    猜你喜欢
    • 2015-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 2011-07-10
    • 1970-01-01
    相关资源
    最近更新 更多