akka消息应该实现Serializable吗?

时间:2015-02-14 17:56:33

标签: java serialization akka

我遇到了一个实现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通过线路从主管向演员发送序列化消息? 在我的测试中它似乎没有任何区别。

编写此类的开发人员已经开始了。

1 个答案:

答案 0 :(得分:1)

All messages sent over the wire must be serializable.

(它们通常隐含在案例类或案例对象中。)如果我将Greet更改为普通对象并因此使其不是Serializable,那么Akka Scala可以工作,这表明它们在同一个JVM中运行虽然这是一个好习惯,但必须这样做。

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

编辑因此,如果您在一个actor中修改了一条消息,那很可能会影响同一JVM中所有其他actor的状态。当然,它是否在一个不同的JVM中是不可能的,除非你做的像遥控我们不是。