【问题标题】:Why are actor messages serializable?为什么actor消息是可序列化的?
【发布时间】:2015-04-16 07:21:57
【问题描述】:

阅读“http://doc.akka.io/docs/akka/snapshot/general/remoting.html”,它声明“通过网络发送的所有消息都必须是可序列化的”,这反过来要求发送给参与者的所有消息都是可序列化的。为什么要求actor是可序列化的?

是使用序列化和反序列化在参与者之间发送消息的原因吗?使用序列化发送/接收消息的原因是可能将消息发送到驻留在不同 JVM 上的参与者?

【问题讨论】:

  • 嗯,是的,这当然是一个原因。
  • Actor 的核心概念是无缝分布式计算。

标签: java scala akka


【解决方案1】:

消息在技术上不需要可序列化,除非它们实际上是跨进程边界发送的。最佳做法是所有消息都应该是可序列化的,以保持位置透明性。

为了测试目的强制可序列化,您可以使用配置akka.actor.serialize-messages=on,这将导致 akka 始终尝试序列化消息,即使在本地发送时也是如此。

【讨论】:

  • "across a process boundary" ,这里指的消息来自与消息来源不同的 jvm
  • 从一个 JVM 中的参与者发送到另一个 JVM 中的参与者的消息。由于消息是通过套接字发送的,因此它们需要在发送方进程 (JVM) 中序列化为字节,然后在接收方进程 (JVM) 中反序列化回消息对象。
猜你喜欢
  • 2020-05-28
  • 2015-02-13
  • 2014-03-29
  • 1970-01-01
  • 2011-09-06
  • 2016-07-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多