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 中,那是不可能的,除非您正在做一些我们不会做的远程处理之类的事情。
我遇到了一个实现 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 中,那是不可能的,除非您正在做一些我们不会做的远程处理之类的事情。