我目前正在制作一个非常大的基于Akka的Java应用程序,而且我遇到了一些让我感到困惑的问题.
我目前的包布局看起来像这样:

我的Mobile班级担任actors包内演员的主管.
因为我不希望创建一组新演员的每一个的HttpClient和Account,我通过周围那些消息对象,其存储在信息包,与端点一起ActorRef接收最终结果.然而,这确实创建了一个非常混乱的messages包,每个actor都有不同的消息.例如.MobileForActor1,Actor1ForMobile,MobileForActor2等现在的问题是,有没有使用这种东西,这个问题涉及和是我的结构的公约(Mobile- > Actor1- > Mobile- > Actor2- >等)阿卡希望它是或做的方式我只需要对消息进行排序(Mobile- > Actor1- > Actor2- >等)?
现在我发送ConnectMessage给我的Mobile演员然后发送给它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.使用最少量的信息对于读取这些名称的任何人都有用.我认为这部分问题可能导致对此缺乏回应.我发现它很混乱,因为很多细节都没有了.
希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
2643 次 |
| 最近记录: |