我正在尝试理解以下选项之间的权衡和最佳实践(如果有):
讯息
演员
.match(POJOA.class, message -> {
...
.match(POJOB.class, message -> {
...
.match(POJOC.class, message -> {
...
if (POJO.getPhase().equals("start"))
...
else ...
使用的常见做法是什么? 在性能,代码可维护性等方面有什么好处。
答案 0 :(得分:0)
例如:假设您将actor用作键值存储。
您可以拥有一些通用的获取/设置/删除消息
public class Get {String key;}
public class Set<T> {String key; T value;}
public class Delete {String key;}
问题是您的设置消息。它的类型是参数化的。一些序列化框架对你来说并不那么容易。
因此您可以将其更改为特定集:
public class SetA {String key; A value;}
public class SetB {String key; B value;}
然后bam,类型参数消失了。
但第三种选择是你仍然需要的东西! Akka序列化要求您将序列化程序绑定到类(顶级一级),并且在大多数情况下,您希望为所有消息使用单个序列化程序,因此实现此目的的方法是空的interace:
public interface Message {}
public class Get implements Message {String key;}
public class SetA implements Message {String key; A value;}
public class SetB implements Message {String key; B value;}
public class Delete implements Message {String key;}
然后在配置文件中:
akka.actor{
serializers {
mySerializer = xxx
}
serialization-bindings {
Message = mySerializer
}
}