注意在测试过程中任何Akka演员都将重新启动

时间:2018-12-03 16:06:19

标签: akka

在许多单元测试中,我创建了一个演员,有时还会创建其他演员。在验证系统在正常情况下能按预期工作的测试(而不是对故障条件的测试)中,我通常希望没有任何参与者重启。

是否存在一种通用方法来检查没有任何参与者重新启动?我认为答案可能涉及主管,但我不清楚如何修改以非测试代码创建的演员的主管。

我认为我要寻找的是能够说出“监视/user演员和所有后代,并在该演员重新启动时向该演员发送消息”之类的话。

如果相关,我正在使用akka 2.5和Java 10

1 个答案:

答案 0 :(得分:0)

不重启给您带来什么价值?您是否不应该利用监督策略并保证在临时故障情况下最终要执行的操作会被执行?

这实际上是分布式系统中的一种已知设计,通常称为错误内核。这也是罗兰·库恩(Roland Kuhn)在他的书Reactive Design Patterns中谈到的不同模式之一。

它由一个有状态的参与者(封装您的应用程序中的模块的业务逻辑)组成,需要以故障安全的方式(即:写入数据库)产生一些副作用。因此,为了产生副作用,它将产生一个子角色,该子角色将在不阻止父对象的情况下执行该动作,并且如果失败,它可以利用监督策略重新启动并重新尝试或放弃。我们经常在测试中模拟这种行为,以此方式可以验证应用程序不仅在数据库不响应时崩溃,而且还可以验证它最终可以与之通信。

毕竟,这是一种主观话题,当然,前面的示例可以任意复杂。但是关键是,您应该选择Akka来帮助您编写弹性系统。因此,测试它可以在短期故障条件下生存的情况将为您带来比相反的更多的价值