我遇到了一个实现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被实现为发送给actor的消息的一部分。这需要吗?我能想到的唯一原因是Akka通过线路从主管向演员发送序列化消息? 在我的测试中它似乎没有任何区别。
编写此类的开发人员已经开始了。
答案 0 :(得分:1)
All messages sent over the wire must be serializable.
(它们通常隐含在案例类或案例对象中。)如果我将Greet
更改为普通对象并因此使其不是Serializable,那么Akka Scala可以工作,这表明它们在同一个JVM中运行虽然这是一个好习惯,但必须这样做。
相反,它们也应该是不可变的,以防收到的消息是引用 - 等于发送的消息,它们可能位于同一个JVM中。
编辑因此,如果您在一个actor中修改了一条消息,那很可能会影响同一JVM中所有其他actor的状态。当然,它是否在一个不同的JVM中是不可能的,除非你做的像遥控我们不是。