我当前的包布局看起来像这样:
我的移动课程作为演员包中的演员的主管.
由于我不想为每个HttpClient和Account创建一组新的演员,所以我将消息对象中的消息对象与存储在消息包中的端点ActorRef一起传递给接收最终结果的端点ActorRef.然而,这会创建一个非常混乱的消息包,每个演员都有不同的消息.例如. MobileForActor1,Actor1ForMobile,MobileForActor2等.现在我的问题是,是否有一个公约用于处理这个问题的这种东西,是我的结构(Mobile-> Actor1-> Mobile-> Actor2->等.)Akka想要这样做的方式,或者我必须仅仅排列消息(Mobile-> Actor1-> Actor2->等).
现在我发送一个ConnectMessage到我的移动演员,然后它发送给Actor1,Actor1处理它并发送一个新的消息回移动,移动发送该响应然后到Actor2,该循环继续创建一个基于老信息.例如.新Message2(message1.foo,message1.bar,message1.baz,newComputatedResult,newComputatedResult2等);
这是一个很好的做法,还是应该包含旧的实例(可能包含不再有用的信息),并且包括新的东西?例如.新Message2(message1,newComputatedResult2等);
还是应该做一些完全不同的事情?
我想到使用TypedActors,但是那些需要使用瀑布模式,我不知道如何传递想要接收最终结果的侦听器的ActorRef.
我希望自己能够理解,因为英语不是我的少女语言,而且这个问题对大家来说是清楚的.
我是一个开始Akka的开发人员,并且喜欢这个想法,但由于文档并不完美,我认为这是最好的地方.谢谢阅读!
解决方法
首先,创造演员是非常便宜的;它们非常轻巧.那么,为什么不为每个HttpClient和Account创建一个,并给他们从他们的身份派生的合适的名字?这也避免了你必须尽可能多地传递他们,可能是放弃你的代码.
第二,保持你的消息名称短,重点突出,并用动词开始.每个消息都应该告诉演员做某事,这样你就可以通过使用动词来反映这个名字.
第三,这些消息与演员一起去.我通常在actor类的伴随对象中声明它们,所以使用它们就像ActorClass.MessageName,除非它在ActorClass中,而且只是MessageName.
第四,追加一名演员的名字.我经常只是结合一个计数器(使用AtomicInteger)和类型名称(Car-1,Car-2等).
如果层次结构对您很重要,我建议仅将父actor追加到名称中. Car-7中包含“Phone-1-in-Car-7”的意思,即Phone-1.然后,您可以通过遵循父链接以编程方式和手动方式组合层次结构.
我认为ConnectMessage中的“消息”是多余的.只要使消息名称为“Connect”,或者更好的“ConnectToThing”(无论如何,如果相关).
我不会把你的消息名称复合得太多,就像你用Message2提示一样.使用最少量的信息对谁来读这些名字有用.我认为对这个缺乏回应可能是由于你的这个问题的部分.我发现它很混乱,因为很多细节都没有.
希望这可以帮助.