[英]Naming conventions for Akka messages and actors
我目前正在制作一个非常大的基于Akka的Java应用程序,而且我遇到了一些让我感到困惑的问题。
我目前的包布局看起来像这样:
我的Mobile
类充当actors
包内actors
的主管。
因为我不想为每个HttpClient
和Account
创建一组新的Actors,所以我将它们传递给消息包中存储的消息对象,以及接收最终结果的端点ActorRef
。 但是,这会创建一个非常混乱的messages
包,每个actor都有不同的消息。 例如。 MobileForActor1
, Actor1ForMobile
, MobileForActor2
等现在我的问题是,是否有一个公约用于处理这个问题的这类东西,并且是我的结构( Mobile
- > Actor1
- > Mobile
- > Actor2
- >等)的方式Akka希望它是或者我只需要对消息进行排序( Mobile
- > Actor1
- > Actor2
- >等)?
现在我正在向我的Mobile
actor发送一个ConnectMessage
,然后将它发送给Actor1
, Actor1
处理它并将新消息发送回Mobile
, Mobile
然后将该响应发送给Actor2
,并且循环继续,基于创建新消息旧消息。 例如。 new Message2(message1.foo, message1.bar, message1.baz, newComputatedResult, newComputatedResult2, etc);
这是一个好习惯,还是应该包含旧实例(可能包含不再有用的信息)并包含新内容? 例如。 new Message2(message1, newComputatedResult, newComputatedResult2, etc);
或者我应该做一些完全不同的事情?
我想过使用TypedActors但是那些需要使用瀑布模式,我不知道如何传递想要接收最终结果的侦听器的ActorRef。
我希望自己能够理解,因为英语不是我的母语,而且每个人都清楚这个问题。
我是Akka开发人员的开始并且喜欢这个想法,但由于文档没有很好地涵盖这一点,我认为这将是最好的问题。 谢谢阅读!
为了回应这个问题,我会冒一些评论,因为我在Akka的学习曲线中处理了同样的问题。 我认为你要求一些经验法则,因此我的内容包含在内。
首先,创造演员非常便宜; 它们非常轻巧。 那么,为什么不为每个HttpClient和Account创建一个,并为它们提供从其身份派生的合适名称? 这也避免了你必须尽可能多地传递它们,可能会使你的代码整齐。
其次,保持消息名称简短,重点突出并以动词开头。 每条消息都应告诉演员做某事,以便你希望名字通过动词反映出来。
第三,消息集与演员一起。 我通常在actor类的伴随对象中声明它们,因此使用它们就像ActorClass.MessageName
除非它在ActorClass
,然后它只是MessageName
。
第四,在演员的名字附加一个计数器。 我经常只将一个计数器(使用AtomicInteger
)与该类型的名称( Car-1
, Car-2
等)组合在一起。
如果层次结构对您很重要,我建议只将父actor附加到名称。 像Phone-1-in-Car-7
意味着Phone-1
包含在Car-7
。 然后,您可以通过遵循父链接以编程方式和手动方式组合层次结构。
我认为ConnectMessage
“消息”是多余的。 只需将消息名称设置为“Connect”或甚至更好的“ConnectToThing”(无论是什么,如果相关的话)。
我不会像你在Message2
建议的那样复杂化你的消息名称。 使用最少量的信息对于读取这些名称的任何人都有用。 我认为这部分问题可能导致对此缺乏回应。 我发现它很混乱,因为很多细节都没有了。
希望这可以帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.