暂停时发送给参与者的消息会发生什么?

What happens to messages sent to an actor while it is suspended?

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

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

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

在第 4 步,这些消息会怎样?

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

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

在 A 失败和它的 restart/resume 之间的消息存储发生了什么变化? 它被丢弃了吗?它是未隐藏的吗?它是否保存在藏匿处?

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

在 actor 失败和重启之间,发送给 Backoff 监督者监督的 actor 的消息会发生什么?

它们被发送到 deadLetters()

在 actor 失败和重启之间的消息存储会发生什么变化?

在实际尝试重新启动之前,存储不会发生任何变化。当重新启动过程开始时,存储的 preRestart() 步骤调用 unstashAll() 到 return 所有邮件到邮箱。因此消息不会丢失,也不会保存在存储中,而只是取消存储并return发送到邮箱。