4

我是 Akka 的初学者,我喜欢它为异步编程提供的许多功能,例如 Actors、Agents 或 Futures。

Akka 的一个强大卖点是,当一个 Actor 崩溃时,Actor 系统会重新创建一个等效的 Actor 并插入旧的位置,从而保证了强大的稳定性。

其他一些系统(我被告知 JMS 就是其中之一)更进一步,并持续保持参与者之间发送的消息。这样,如果机器在物理上崩溃了——比如由于硬件故障——仍然可以恢复到故障前的状态。

这对我现在正在开发的应用程序非常有吸引力。Akka 是否提供任何此类机制?如果没有,是否有某种方法可以将其与外部系统集成以实现这一目标?

4

2 回答 2

10

是的,您所描述的可以通过使用持久邮箱来实现,它们可以根据每个参与者的需要进行配置。

对于不同的后端有几种实现,如果你没有为你最喜欢的消息队列找到一个,那么实现你自己的适配器不会很困难。我们将在 Akka 源代码树中维护的唯一实现是FileBasedMailbox,用作如何做到这一点的模板。Akka 2.0.x 发行版中的其他邮箱类型由其各自的“所有者”作为社区项目维护。

于 2012-10-05T23:05:51.280 回答
5

持久邮箱是一种选择性保存消息的好方法,这样 Akka 可以实现类似 JMS 的东西。除了技术之外,在架构级别上考虑哪些消息与您的系统相关以及在系统故障后应如何恢复状态非常重要。

与演员范式很好地结合在一起的一种方法是事件溯源。在这个概念中,应用程序的状态存储为一系列事件,而不是状态本身。当系统或其一部分发生故障时,可以通过应用来自持久事件存储的所有事件来恢复状态。持久邮箱可以是指向此类事件存储的链接,也可以直接使用专用参与者。

Martin Krasser 在此博客上有一篇非常好的文章,描述了使用 Akka 的这种方法。他还是名为eventsourced的 Akka 事件源扩展的作者。

于 2012-10-05T23:34:19.573 回答