Akka:将消息从一个演员转发到另一个演员

Akka:将消息从一个演员转发到另一个演员,akka,Akka,如果这是一个重复的问题,请道歉 我是AKKA的新手,尝试扩展AKKA java spring示例代码以添加另一个参与者,并使用不可变对象计数器作为消息发送给CoutingActor,CoutingActor打印消息并将其转发给PrintMessageActor(新参与者)。如何从CoutingActor将消息转发到PrintMessageActor。在本例中,如何使用文档中的以下代码段 target.forward(result, getContext()); 如何在第一个参与者中获得目标(第

如果这是一个重复的问题,请道歉

我是AKKA的新手,尝试扩展AKKA java spring示例代码以添加另一个参与者,并使用不可变对象计数器作为消息发送给CoutingActor,CoutingActor打印消息并将其转发给PrintMessageActor(新参与者)。如何从CoutingActor将消息转发到PrintMessageActor。在本例中,如何使用文档中的以下代码段

target.forward(result, getContext());

如何在第一个参与者中获得目标(第二个参与者?

如果我正确理解了您的问题,您想知道转发参与者从哪里知道它应该转发到的目标

两种可能性:

1) 如果目标参与者在转发参与者化身时已经存在,那么您可以通过构造函数或消息将目标的
ActorRef
传递给它。有关如何使用自己的参数创建自定义道具实例的信息,请参阅文档


2) 如果目标在创建转发器时不存在,但其在
ActorSystem
中的路径已清除(例如“/user/PrintMessageActor”),则可以传入
ActorSelection
。如果给定ActorSystem中存在此路径中的参与者,则ActorSelection可以解析为ActorRef。第二个选项更可取,因为如果基础参与者死亡,ActorRef将无效。另一方面,演员选择将决定演员在此路径上可能的新化身。

谢谢你,比约恩。我将尝试使用第二个选项。我还想为CoutingActor和PrintMessageActor创建子角色。如何在父参与者中创建子参与者,以及子参与者如何处理消息?我想做的是——将消息传递给CoutingActor——这个演员的孩子打印一条消息,然后将消息传递给PrintMessageActor——这个演员有孩子,他们打印一条消息。我还想控制家长演员可以拥有的孩子数量。如果你能为我指出正确的方向,我将不胜感激。您可以创建任意数量的子角色。创建第一级角色和子角色之间的唯一区别是为您创建的对象。如果要创建一个第一级参与者(如“/user/MyActor”),那么可以直接使用ActorSystem,例如,对于ActorRef使用system.actorOf(…),对于actorSelection使用system.actorSelection(…)。可以使用ActorContext从参与者内部创建子参与者。(context.actorOf/.actorSelection)(续)向所有孩子发送相同的消息(广播)可以通过两种方式实现。要么迭代父参与者的“children”属性,向它们发送相同的消息,要么使用称为路由器的特殊类型的中间参与者。这个路由器有几种不同的实现,其中一种是广播路由器,它可以满足您的需要。但在这样一个简单的例子中,我个人更喜欢在子对象上迭代。我确实喜欢路由器的想法。我写这篇文章是为了了解阿克卡,以便为我的工作建立一个POC。你能帮我找到一个链接,在那里我可以找到一个Java的示例代码,我可以看一下吗?一些工作示例具有多个父参与者,而每个父参与者都具有很少的子参与者。我看到的大多数示例都是Scala,我对它不是很熟悉。再次感谢您的回复。实际上,Akka文档中有一个有用的例子。我没有检查整个示例,但是浏览代码时,我发现子角色被实例化,并且正在使用路由器。都是Java语言。看看这个:顺便说一下,如果你觉得我的答案有用,请别忘了把它标记为已接受。在这里,我们都渴望这些点