假设在某种状态下,akka演员A创建了一个儿童演员B:
Context.ActorOf(Props.Create(() => new BActor(RawDetails)));
RawDetails
是一个相当大但很简单的对象,没有引用,必须在包含许多引用的实际数据对象SmartDetails
中进行转换。
SmartDetails
在BActor
的构造函数中创建,现在必须发送给akka actor A.
我必须保证在将{B}发送给A时不会将SmartDetails
序列化。
这是继续使用akka的有效方法吗? 我们测试了它并且它有效,即它没有序列化。
我正在搜索文档,例如我可以找到一个声明,即在与父actor相同的进程中创建子actor,并且不会发生序列化。
当消息SmartDetails
被序列化时,akka会崩溃,因为SmartDetails
太大了。
原始的RawDetails
来自另一个序列化形式的演员,它以小的简单数据包“发货”。
答案 0 :(得分:1)
默认情况下,同一个ActorSystem
(同一进程和AppDomain)中的消息不会被序列化 - 因此它们为什么如此重要以至于它们是不可变的。
文档在“验证”部分提到here:
通常,本地参与者(即相同的CLR)之间发送的消息不会 进行序列化。对于测试,有时可能需要 对所有消息(远程和本地)强制序列化。
但是,通过远程处理/群集发送到另一个演员系统的消息将被序列化。