Java中的Akka集群,用于使用Java邮件API获取IMAP

Java中的Akka集群,用于使用Java邮件API获取IMAP,java,jakarta-mail,imap,akka,akka-cluster,Java,Jakarta Mail,Imap,Akka,Akka Cluster,我想启动一些任务,它将连接到IMAP,并将电子邮件数据存储到数据库中 现在这样的工作将有巨大的容量来支持许多IMAP帐户。我想利用Akka群集功能,它可以在网络中预定义的一组机器中运行这些作业,并在从IMAP主机获取数据时在出错时进行重试 我想创建一个akka集群,它将启动IMAPfetchjob(通过一个Actor??!!) IMAP是一个棘手的协议,它可能无法连接到远程主机。在这种情况下,参与者应该重试几次可配置的时间来连接和获取 最终,它应该充当我的IMAP回程端 我应该怎么做呢?使用Ja

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

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

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

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

最终,它应该充当我的
IMAP
回程端


我应该怎么做呢?

使用JavaMail。阅读。

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

  • Supervisor节点有一个actor,它从DB中选择用户进行处理
  • IMAP工作者参与者在准备工作时通知主管(有关这种“工作拉动”架构的更多信息,请参阅我的同事Ryan Tanner的博客帖子:)
  • Supervisor将ProcessAccount消息(一个自定义对象,包括Gmail OAuth令牌(您也可以使用传统的用户名和密码凭据))发送给空闲的IMAP工作者
  • IMAP工作者使用JavaMail读取和处理新消息。在发生错误时,它会将FailedProcessing消息(包括错误代码和人类可读字符串的自定义对象)发送回supervisor actor。成功后,它将发送CompletedProcessing
  • 主管更新数据库中的用户记录,包括在处理失败时设置错误代码
  • 除了定期处理正常帐户外,主管还会重试处理失败的帐户。我们的用例是这样的,我们每天只尝试重新处理一次,但您可以更频繁地这样做

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

    感谢您在解决类似问题时概述了此方法。但是你有什么代码可以参考吗,我是一个阿卡诺布:(请尊重一点:Paul花了相当长的时间写了一篇非常详细的文章。如果你想让别人为你工作,那么你就必须为此付钱。@RolandKuhn我明白你的意思,我从来都不想要完整的源代码。只是一些类似的开放源代码库。我非常感谢或者保罗给出的详细答案。为了遵守SO规则,我已经对其进行了投票。因为我可以看到Akka项目负责人自己在答案下面发表评论,我现在必须接受它:)谢谢你注意到这个问题。谢谢罗兰。拉凯什,恐怕我不能分享比Ryan已经在博客上发布的更多的代码,但是那里有一些好东西。(注意,上面的链接是五篇文章中的第五篇,大部分与Akka相关。)比尔!谢谢你的指点,我已经看到你早些时候对我的java mail相关问题的快速回复。我已经知道如何使用java mail API获取电子邮件。我的问题更多的是关于如何将其与Akka技术结合使用。:)