akka - 不可序列化的“道具”是反模式吗?
问题描述
例子:
假设我有一个参与者正在管理与某个外部服务的通信,因此它Client
内部有一个对象用于向外部服务发出请求。为了避免这个actor变得单一,我可能想创建子actor来处理不同的交互:维护服务的心跳,发出和协调复杂的请求等。这些子actor需要Client
对服务的引用.
鉴于这些客户端对象不太可能是可序列化的并且可能是有状态的,例如包含连接状态,将它们传递给子角色是否是一种反模式Props
?Akka 文档似乎强烈鼓励维护可序列化的道具,但在这种情况下,这似乎是极其有限的。
解决方案
Akka 文档似乎强烈鼓励维护可序列化的道具
我不知道这个建议,你介意分享问题中的链接吗?
Client
根据我的经验,将这些参考从父母传递给子演员是很常见的。有时我可能会选择传递确切的方法(一个函数)而不是Client
引用,以便于单元测试。只要你没有在网络边界上产生一个演员,我看不出这是一件坏事的任何理由。
关于Client
您描述的对象,对于网络级别的事物(例如,连接状态等),我将利用akka-http Client API。如果您要保留应用程序级别的东西,我希望有一个单独的参与者专门用于此类用途。如果你有 Akka 角色,它被设计为托管状态,那么将应用程序状态保持在非角色中对我来说听起来有点反模式。
推荐阅读
- python - 将 SendGrid 与 Azure ML 一起使用的问题
- react-native - 测试 React-Navigation:如何检查屏幕没有聚焦(StackNavigator)
- spring-boot - 将 spring boot 执行器健康状态报告为指标
- r - 构建配对块的索引
- c++ - 错误:通过引用返回指针数组的 const 方法
- ios - 将基于目标的 Swift 编译器标志设置为 POD 框架
- javascript - 仅在界面中使用 Record 而不是 TypeScript 中的动态键
- python - Python 从 Web 解压存档
- docusignapi - 使用 DocuSign API 是否有更好的方法来检查是否发生了清除?
- git - Macbook 上的 VS Code 停止使用 SSH 密钥进行 Git 身份验证