【问题标题】:Actor addresses and tests演员地址和测试
【发布时间】:2013-09-02 21:36:04
【问题描述】:

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

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

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 的地址以查看接收到的内容。但是我想知道是否没有办法在测试中“冒充”给定地址,尤其是。在地址不简单的情况下。

换句话说,我想测试演员的行为(它是否确实会在收到Foo 时将"Bar" 发送给编排器

【问题讨论】:

  • 很抱歉,我完全不明白这个问题。你能列出你拥有的和想要的吗?
  • 确实,这有点毛骨悚然,希望现在更清楚了

标签: scala akka


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-02-11
      • 2014-03-09
      • 2010-10-03
      • 2015-07-24
      • 1970-01-01
      • 2016-02-03
      • 2019-11-10
      • 2013-11-29
      • 1970-01-01
      相关资源
      最近更新 更多