为什么Akka演员会回复自己?

时间:2013-01-22 09:30:49

标签: akka

我有一个集成测试,它会向远程Akka(2.0.5)actor发送大量消息。每次测试运行后,重新启动远程actor actor树。经过43次成功的测试运行后,根据调试级日志消息,远程actor开始向自己发送回复,这显然导致测试失败。

为什么会发生这种情况?

代码库中只有一个地方我发送这些类型的消息,它清楚地说

sender ! generateTheMessage()

1 个答案:

答案 0 :(得分:1)

我弄清楚为什么在我的特定情况下会发生这种情况。实际上有两个参与者参与其中:

A -> B

最初将消息排队,直到系统初始化为止。然后它将排队的消息发送到B,并在它们到达时立即将所有其他消息转发给B.

问题在于,当它转发排队的消息时,原始发件人信息已丢失,因此A成为发件人。因此,B的回复将返回A并再次转发回B.我最初没有意识到后一种转发正在发生,因为我没有为转发启用日志记录。

所以这是一场竞争条件。如果系统足够快地出现一切都没问题,但如果没有,一些初步回复将被误导。

我如何修复此问题是为了将发件人与每个排队的邮件配对,并使用Java API重新发送每个排队的邮件,这允许明确指定发件人。