我对Akka很新。我在Akka设计了一个模块化系统,我正在寻找一种为每个模块定义API的方法。
通常在Java中我会编写一堆bean和一些接受并生成这些bean的接口。从我收集的内容来看,在Akka消息类型中替换bean,并且似乎没有等效的接口(或者某些东西可以帮助编译器强制执行某些"当"或者#34;会发生什么时会发生什么?当"合同)。
我欢迎任何有关编写最一致的API的最佳方法的建议或最佳实践。如果编译器能够理解它,那就是一个严重的奖励。
答案 0 :(得分:1)
Actor(或协作Actors的集合)公开的API由它接受的消息类型集定义。我的建议是让这些消息类靠近Actor,例如作为UntypedActor类(对于Java)或Actor的伴随对象(对于Scala)的静态内部类。对于实现单个接口的较大的actor层次结构,我建议将所有消息类放在“head actor”(层次结构的入口点)或具有描述性名称的其他类中,否则为空。拥有as顶级类很容易导致只能通过使用完全限定的类名解析Java中的名称冲突。
编译器目前还无法帮助您避免向ActorRef发送错误消息的错误,因为该引用无视它所代表的actor类型。我们正在研究解决这个问题的方法,你可以看一下TypedChannels experiment(仅限Scala),今年晚些时候我们将开始研究一种也支持Java的简单解决方案(代号“AkkaGålbma”,见{ {3}})。