保证某些消息不会被序列化

时间:2017-11-13 14:42:24

标签: akka akka.net

假设在某种状态下,akka演员A创建了一个儿童演员B:

Context.ActorOf(Props.Create(() => new BActor(RawDetails)));

RawDetails是一个相当大但很简单的对象,没有引用,必须在包含许多引用的实际数据对象SmartDetails中进行转换。

SmartDetailsBActor的构造函数中创建,现在必须发送给akka actor A.

我必须保证在将{B}发送给A时不会将SmartDetails序列化。

这是继续使用akka的有效方法吗? 我们测试了它并且它有效,即它没有序列化。

我正在搜索文档,例如我可以找到一个声明,即在与父actor相同的进程中创建子actor,并且不会发生序列化。

当消息SmartDetails被序列化时,akka会崩溃,因为SmartDetails太大了。

原始的RawDetails来自另一个序列化形式的演员,它以小的简单数据包“发货”。

1 个答案:

答案 0 :(得分:1)

默认情况下,同一个ActorSystem(同一进程和AppDomain)中的消息不会被序列化 - 因此它们为什么如此重要以至于它们是不可变的。

文档在“验证”部分提到here

  

通常,本地参与者(即相同的CLR)之间发送的消息不会   进行序列化。对于测试,有时可能需要   对所有消息(远程和本地)强制序列化。

但是,通过远程处理/群集发送到另一个演员系统的消息将被序列化。