0

情况是这样的,我的一个演员 (A) 由退避主管 (B) 监督。

我感兴趣的事件顺序如下:

  1. 系统启动,大家都很开心
  2. A 在处理消息时失败
  3. B 现在认为 A 被挂起,直到退避延迟过去
  4. B 收到一些他打算转发给 A 的消息 (MM)
  5. 退避延迟消失,B 重新启动 A
  6. 大家又开心了

在第 4 步,这些消息会发生什么情况?

他们迷路了吗?发送到死信?藏在B的某个地方,并在它重新启动/恢复时发送给A?

现在让我们添加另一个层:A 不是标准 Actor 而是带有 Stash 的 Actor。

在 A 的失败和它的重新启动/恢复之间存储的消息会发生什么? 它被丢弃了吗?是不是没藏起来?它是否保存在藏匿处?

4

1 回答 1

1

经过几次实验,我想我可以回答我上面的两个问题:

在 Actor 失败和重新启动之间,发送给由 Backoff supervisor 监督的 Actor 的消息会发生什么?

他们被送到deadLetters()

在参与者失败和重新启动之间存储的消息会发生什么?

在实际尝试重新启动之前,存储不会发生任何事情。当重新启动过程开始时,preRestart()stash 步骤调用unstashAll()将所有消息返回到邮箱。因此消息不会丢失,也不会保存在存储中,而只是未存储并返回到邮箱。

于 2017-07-04T08:01:05.747 回答