akka 消息应该实现 Serializable 吗?

Should akka message implement Serializable?

我遇到了一个实现 Serializable 的自定义 Akka 消息类型:

public Interface MyMessage
{
    public String getId();
}

public class MyMessageImpl implements MyMessage, Serializable {
     private String id;

     public MyMessageImpl (String id){
       this.id = id;
     }

     public String getId(){
       return this.id;
     }
    }

我不知道为什么将 Serializable 作为发送给参与者的消息的一部分来实现。这是必需的吗?我能想到的唯一原因是 Akka 通过线路从主管向演员发送序列化消息? 在我的测试中,它似乎没有任何区别。

写这篇文章的开发者 class 已经离开了。

All messages sent over the wire must be serializable.

(它们通常是隐含的 case 类 或 case 对象。)如果我将 Greet 更改为普通对象并因此使其不可序列化,Hello Akka Scala 可以工作,这表明 运行 他们不必在同一个 JVM 中,尽管这是一个好习惯。

相比之下,它们也应该是不可变的,以防收到的消息引用等于发送的消息,它们可能在同一个 JVM 中。

EDIT 因此,如果您修改了一个 actor 中的消息,它很可能会影响同一 JVM 中所有其他 actor 的状态。当然,如果它在不同的 JVM 中,那是不可能的,除非您正在做一些我们不会做的远程处理之类的事情。