首页 > 解决方案 > 不可序列化的“道具”是反模式吗?

问题描述

例子:

假设我有一个参与者正在管理与某个外部服务的通信,因此它Client内部有一个对象用于向外部服务发出请求。为了避免这个actor变得单一,我可能想创建子actor来处理不同的交互:维护服务的心跳,发出和协调复杂的请求等。这些子actor需要Client对服务的引用.

鉴于这些客户端对象不太可能是可序列化的并且可能是有状态的,例如包含连接状态,将它们传递给子角色是否是一种反模式Props?Akka 文档似乎强烈鼓励维护可序列化的道具,但在这种情况下,这似乎是极其有限的。

标签: akka

解决方案


Akka 文档似乎强烈鼓励维护可序列化的道具

我不知道这个建议,你介意分享问题中的链接吗?

Client根据我的经验,将这些参考从父母传递给子演员是很常见的。有时我可能会选择传递确切的方法(一个函数)而不是Client引用,以便于单元测试。只要你没有在网络边界上产生一个演员,我看不出这是一件坏事的任何理由。

关于Client您描述的对象,对于网络级别的事物(例如,连接状态等),我将利用akka-http Client API。如果您要保留应用程序级别的东西,我希望有一个单独的参与者专门用于此类用途。如果你有 Akka 角色,它被设计为托管状态,那么将应用程序状态保持在非角色中对我来说听起来有点反模式。


推荐阅读