0

我正在建立一个演员层次结构,其中一些演员回复他们直接发送给知名演员(固定名称)的消息。即这些演员(在层次结构中很远)通过获得一个actorRef context.actorFor("akka://...")

例如,我有一个“编排”演员:

system.actorOf(Props[OrchestratingActor], name = "orchestrator")

然后将有一个地址akka://application/user/orchestrator

在其他地方,一个随机的工作人员收到一条消息并想与协调器交谈:

class RandomWorker extends Actor {
  def theOrchestrator = context.actorFor("akka://application/user/orchestrator")
  def receive = {
    case Foo =>
      theOrchestrator ! "Bar"
  }
}

现在,我想测试这些参与者,并且想知道如何处理这些地址:当对参与者进行单元测试(例如使用 TestActorRef)时,我该如何检查发送到远程地址的内容?一种想法是(在可能的情况下)通过构造函数向知名参与者提供地址,并传入 TestActor 的地址以查看正在接收的内容。但是我想知道是否没有办法在测试中“冒充”给定地址,尤其是。在地址不简单的情况下。

换句话说,我想测试演员的行为(它确实会"Bar"在收到一个Foo

4

2 回答 2

2

我的建议是避免为您展示的目的使用演员查找。在将所有应用程序连接在一起时,它是应用程序设置阶段的工具。但即便如此,大多数演员的主管也会知道他们孩子的依赖关系,而无需使用查找。

在本地 Actor 系统中,所有 ActorRef 都可以从上到下注入(使用构造函数参数或介绍消息)。在相互介绍远程系统时,查找是最有用的。

于 2013-09-01T06:21:40.207 回答
1

通过构造函数注入地址并没有错。如果您需要任何详细信息,请告诉我,因为目前我不知道如何更清楚地说明这一点,因为您基本上回答了自己的问题。顺便说一句,我不知道您使用的是哪个 Akka 版本,但actorFor最近已被弃用以支持ActorSelection,这有充分的理由。

于 2013-08-30T09:22:25.943 回答