2

我已经阅读了 Akka.NET 的在线文档。

我看到持久性插件可以使用事件源模式存储参与者的状态。

但我没有找到任何关于邮箱中邮件的具体信息。

当一个进程死亡或重启时,actor的邮箱恢复消息?

4

2 回答 2

2

Actor 的邮箱始终只在内存中。在 Actor 系统中,消息不仅是与用户域相关的命令,而且是用于控制 Actor 生命周期、实现协议通信等的各种信号。因此,运行中的消息量远高于使用消息代理时的 ie。它们必须以更高的速度传递和处理,而邮箱持久性会大大减慢该过程。

如果你需要从你的域中持久化你的命令,最简单的方法是使用某种持久化消息队列——比如 RabbitMQ、Azure 服务总线甚至 Kafka——作为你的 Actor 系统前面的门面来处理传入的用户请求.

于 2019-05-24T08:21:32.753 回答
0

根据文档和经验,持久化的不是演员状态,而是改变状态的事件,然后在重新启动演员后应用。

Persist() 或 Recover() 期间的消息将被存储,并且在 actor 重新启动时会保存邮箱和存储

("actor 重启只替换了实际的actor对象;邮箱的内容不受重启的影响,因此在 PostRestart 钩子返回后将继续处理消息。触发异常的消息将不会被再次接收。任何发送的消息重新启动时发送给 Actor 的消息将像往常一样排队到其邮箱中。”和“Stash 由 Akka.NET 在 Actor 实例之外处理,就像邮箱一样,因此如果 Actor 在处理消息时死亡,则储藏是保存。”)

但它是为了正常重启,看看 AtLeastOnceDeliveryActor,也许这就是你要的保证交付。并注意 preRestart() 方法在重启时保存当前正在处理的消息。

于 2019-05-23T10:48:21.883 回答