Akka消息和actor的命名约定

时间:2014-06-08 10:40:01

标签: java akka

我目前正在制作一个非常大的基于Akka的Java应用程序,而且我遇到了一些让我感到困扰的问题。

我目前的包装布局看起来像这样:

Project Structure

我的Mobile课程担任actors包中演员的主管。

由于我不想为每个HttpClientAccount创建一组新的Actors,我会将这些A +传递给存储在messages包中的消息对象,以及接收最终结果的端点ActorRef。但是,这会创建一个非常混乱的messages包,每个actor都有不同的消息。例如。 MobileForActor1Actor1ForMobileMobileForActor2等等。现在我的问题是,是否有一个公约用于处理此问题的这类内容并且是我的结构(Mobile - > Actor1 - > Mobile - > Actor2 - >等。)Akka想要它的方式或者我必须对消息进行排序({ {1}} - > Mobile - > Actor1 - >等)

。?

现在我将Actor2发送给我的ConnectMessage演员,然后将其发送给MobileActor1处理它并发回新消息Actor1Mobile然后将该响应发送到Mobile,并且循环继续,并根据旧消息创建新消息。例如。 Actor2

这是一个好的做法,还是应该包含旧实例(可能包含不再有用的信息)并包含新内容?例如。 new Message2(message1.foo, message1.bar, message1.baz, newComputatedResult, newComputatedResult2, etc);

或者我应该做一些完全不同的事情?

我考虑过使用TypedActors,但是那些需要使用瀑布模式,我不知道如何传递想要接收最终结果的侦听器的ActorRef。

我希望自己能够理解,因为英语不是我的母语,每个人都清楚这个问题。

我是Akka开发人员并且很喜欢这个想法,但由于文档没有很好地涵盖这一点,我认为这将是最好的问题。谢谢阅读!

1 个答案:

答案 0 :(得分:9)

我会冒一些评论来回应这个,因为我在Akka的学习曲线中处理了同样的问题。我认为你要求一些经验法则,因此我的内容包含在内。

首先,创造演员非常便宜;它们非常轻巧。那么,为什么不为每个HttpClient和Account创建一个,并为它们提供从其身份派生的合适名称?这也避免了你必须尽可能多地传递它们,可能会使你的代码整齐。

其次,保持消息名称简短,重点突出并以动词开头。每条消息都应告诉演员做某事,以便你希望名字通过动词反映出来。

第三,消息集与演员一起发送。我通常在actor类的伴随对象中声明它们,因此使用它们就像ActorClass.MessageName,除非它在ActorClass内,然后它只是MessageName

第四,在演员的名字附加一个计数器。我经常只将计数器(使用AtomicInteger)与类型名称(Car-1Car-2等)组合在一起。

如果层次结构对您很重要,我建议只将父actor附加到名称。类似Phone-1-in-Car-7的含义Phone-1包含在Car-7中。然后,您可以通过遵循父链接以编程方式和手动方式组合层次结构。

我认为"消息"在ConnectMessage中是多余的。只需将消息名称设为" Connect"甚至更好" ConnectToThing" (无论如何,如果相关的话)。

我不会像你在Message2建议的那样过多地复制你的信息名称。使用最少量的信息对于读取这些名称的任何人都有用。我认为这部分问题可能导致对此缺乏回应。我发现它很混乱,因为很多细节都没有了。

希望这会有所帮助。