[英]Akka actors and messages best practic
我正在尝试了解以下选项之间的权衡和最佳实践(如果有):
消息
演员
.match(POJOA.class, message -> {
...
.match(POJOB.class, message -> {
...
.match(POJOC.class, message -> {
...
if (POJO.getPhase().equals("start"))
...
else ...
常用的做法是什么? 在性能,代码可维护性等方面更胜一筹。
到目前为止,A,B和C的混合物对我来说效果很好。 您希望您的消息尽可能具体(这样可以不言自明),但是您仍然需要一定的概括性。
例如:假设您正在使用参与者作为键值存储。
您可以拥有一些通用的“获取/设置/删除”消息
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;}
而且,类型参数不见了。
但是您仍然需要第三个选项! Akka序列化要求您将序列化器绑定到一个类(最上层的类),并且在大多数情况下,您希望对所有消息使用单个序列化器,因此实现此目的的方法是空的接口:
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
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.