【问题标题】:Can an Akka actor store its outgoing messages in a durable mailbox?Akka Actor 可以将其传出消息存储在持久邮箱中吗?
【发布时间】:2013-02-20 15:53:22
【问题描述】:

Akka Actor 能否将其传出消息存储在本地 durable outbox 中,直到其远程接收 Actor 准备好在其自己的持久收件箱中接收它们?换句话说,我可以使用 Akka 来执行类似于电子邮件的store-and-forward 风格的消息传递吗?

【问题讨论】:

    标签: messaging distributed akka


    【解决方案1】:

    您可以通过添加某种消息持久性来采用 Akka Reliable Proxy 模式 (http://doc.akka.io/docs/akka/snapshot/contrib/reliable-proxy.html)。

    此外,您可以创建自己的持久邮箱,它可以通过添加消息状态、时间戳和目标参与者类型将消息持久保存到数据库(它还可以解决可调整大小路由器的路由的持久邮箱问题)。您也可以将此存储用于您的可靠代理(也使用时间戳和目标参与者类型)。在这种情况下,您可以通过相同类型的活动参与者从死集群节点恢复超时消息。

    我们在我们的项目中使用了这种机制,我们的持久邮箱也支持确认模式,我们可以恢复处理期间超时的消息(如果一个演员在处理消息期间死亡)。只是不要忘记 maxFailures(在确认模式的情况下)并且不要保留 PoisonPill / Kill 消息。

    【讨论】:

    • 嗨,sergiy。您是否为 db 上的持久邮箱编写了自己的实现,或者您是否找到已经准备好使用的实现?
    • 我已经编写了由 MongoDB 支持的自己的实现。我计划在一些重构/美化之后分享它(当我有足够的时间时)。
    【解决方案2】:

    我赞同 Martin 的回答:Akka actor 旨在形成可以构建更复杂事物的基本构建块,Martin 的库就是一个很好的例子。在“基础”中提供越来越多的功能是我们几年前尝试并恢复的,而是保持精简和专注。

    【讨论】:

      【解决方案3】:

      您可以使用reliable channelsEventsourced 做到这一点。 Eventsourced 是 Akka 的事件溯源库。

      【讨论】:

        猜你喜欢
        • 2012-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-15
        • 2015-11-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多