【发布时间】:2013-02-20 15:53:22
【问题描述】:
Akka Actor 能否将其传出消息存储在本地 durable outbox 中,直到其远程接收 Actor 准备好在其自己的持久收件箱中接收它们?换句话说,我可以使用 Akka 来执行类似于电子邮件的store-and-forward 风格的消息传递吗?
【问题讨论】:
标签: messaging distributed akka
Akka Actor 能否将其传出消息存储在本地 durable outbox 中,直到其远程接收 Actor 准备好在其自己的持久收件箱中接收它们?换句话说,我可以使用 Akka 来执行类似于电子邮件的store-and-forward 风格的消息传递吗?
【问题讨论】:
标签: messaging distributed akka
您可以通过添加某种消息持久性来采用 Akka Reliable Proxy 模式 (http://doc.akka.io/docs/akka/snapshot/contrib/reliable-proxy.html)。
此外,您可以创建自己的持久邮箱,它可以通过添加消息状态、时间戳和目标参与者类型将消息持久保存到数据库(它还可以解决可调整大小路由器的路由的持久邮箱问题)。您也可以将此存储用于您的可靠代理(也使用时间戳和目标参与者类型)。在这种情况下,您可以通过相同类型的活动参与者从死集群节点恢复超时消息。
我们在我们的项目中使用了这种机制,我们的持久邮箱也支持确认模式,我们可以恢复处理期间超时的消息(如果一个演员在处理消息期间死亡)。只是不要忘记 maxFailures(在确认模式的情况下)并且不要保留 PoisonPill / Kill 消息。
【讨论】:
我赞同 Martin 的回答:Akka actor 旨在形成可以构建更复杂事物的基本构建块,Martin 的库就是一个很好的例子。在“基础”中提供越来越多的功能是我们几年前尝试并恢复的,而是保持精简和专注。
【讨论】:
您可以使用reliable channels 或Eventsourced 做到这一点。 Eventsourced 是 Akka 的事件溯源库。
【讨论】: