2012-10-05 25 views
4

我是Akka的初学者,我喜欢它为异步编程提供的许多功能,例如Actor,Agents或Futures。在发生崩溃时坚持Akka状态

阿卡的一个强大卖点是,当一个演员崩溃时,一个等同的演员被演员系统重新创建并替换旧演员,保证了强大的稳定性。

其他一些系统(我被告知JMS是其中一个系统)更进一步,持续不断地发送演员之间发送的消息。这样,如果机器在物理上崩溃(比如说硬件故障),仍然可以恢复故障发生前的状态。

这对我现在正在开发的应用程序非常有吸引力。 Akka是否提供这样的机制?如果没有,有没有办法将它与外部系统整合成可以实现的方式?

回答

5

持久邮箱是有选择地保存邮件的好方法,因此Akka可以实现类似JMS的功能。除了技术之外,在体系结构级别考虑哪些消息与系统相关以及在系统故障后应该如何恢复状态是非常重要的。

与演员范式很好地结合在一起的一种方式是事件采购。在这个概念中,你的应用程序的状态是作为一系列事件存储的,而不是状态本身。当系统或其中的一部分失败时,可以通过应用来自持久事件存储的所有事件来恢复状态。持久邮箱可以是这种活动商店的链接,也可以直接使用专门的演员。

Martin Krasser在本博客中有一个很好的article描述这种方法使用阿卡。他还是Akka事件采购扩展的作者,其名称为eventsourced

10

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

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