暂停时发送给参与者的消息会发生什么?
What happens to messages sent to an actor while it is suspended?
情况是这样的,我的一个演员 (A) 由一位 Backoff 主管 (B) 监督。
我感兴趣的事件顺序如下:
- 系统启动,皆大欢喜
- A 在处理消息时失败
- B 现在认为 A 被挂起,直到退避延迟结束
- B 收到一些他要转发给 A 的消息 (MM)
- 退避延迟结束,B 重新启动 A
- 大家又开心了
在第 4 步,这些消息会怎样?
他们迷路了吗?发送到死信?藏在 B 的某个地方,并在它重新启动/恢复时发送给 A?
现在让我们添加另一层:A 不是标准 Actor,而是带有 Stash 的 Actor。
在 A 失败和它的 restart/resume 之间的消息存储发生了什么变化?
它被丢弃了吗?它是未隐藏的吗?它是否保存在藏匿处?
经过几次实验,我想我可以回答我上面的两个问题:
在 actor 失败和重启之间,发送给 Backoff 监督者监督的 actor 的消息会发生什么?
它们被发送到 deadLetters()
在 actor 失败和重启之间的消息存储会发生什么变化?
在实际尝试重新启动之前,存储不会发生任何变化。当重新启动过程开始时,存储的 preRestart()
步骤调用 unstashAll()
到 return 所有邮件到邮箱。因此消息不会丢失,也不会保存在存储中,而只是取消存储并return发送到邮箱。
情况是这样的,我的一个演员 (A) 由一位 Backoff 主管 (B) 监督。
我感兴趣的事件顺序如下:
- 系统启动,皆大欢喜
- A 在处理消息时失败
- B 现在认为 A 被挂起,直到退避延迟结束
- B 收到一些他要转发给 A 的消息 (MM)
- 退避延迟结束,B 重新启动 A
- 大家又开心了
在第 4 步,这些消息会怎样?
他们迷路了吗?发送到死信?藏在 B 的某个地方,并在它重新启动/恢复时发送给 A?
现在让我们添加另一层:A 不是标准 Actor,而是带有 Stash 的 Actor。
在 A 失败和它的 restart/resume 之间的消息存储发生了什么变化? 它被丢弃了吗?它是未隐藏的吗?它是否保存在藏匿处?
经过几次实验,我想我可以回答我上面的两个问题:
在 actor 失败和重启之间,发送给 Backoff 监督者监督的 actor 的消息会发生什么?
它们被发送到 deadLetters()
在 actor 失败和重启之间的消息存储会发生什么变化?
在实际尝试重新启动之前,存储不会发生任何变化。当重新启动过程开始时,存储的 preRestart()
步骤调用 unstashAll()
到 return 所有邮件到邮箱。因此消息不会丢失,也不会保存在存储中,而只是取消存储并return发送到邮箱。