Akka TestProbe 测试 context.watch() / 终止处理

2024-02-29

我正在使用 TestKit 测试 akka 系统。我正在测试的系统的一个参与者在收到某种消息类型后,context.watches 发送者,并在发送者死亡时自杀:

trait Handler extends Actor {
    override def receive: Receive = {
        case Init => context.watch(sender)
        case Terminated => context.stop(self)
    }
}

在我的测试中我发送

val probe = TestProbe(system)
val target = TestActorRef(Props(classOf[Handler]))
probe.send(target, Init)

现在,为了测试手表/终止行为 - 我想模拟测试探针被杀死。

I can do

probe.send(target, Terminated)

但是,这前提是目标已经调用context.watch(sender),否则它不会收到终止消息。

I can do

probe.testActor ! Kill

不发送Terminated除非目标已正确调用context.watch(sender),但我实际上并不希望 testprobe 被杀死,因为它需要保持响应以测试(例如)目标是否继续发送消息而不是停止自身。

我已经遇到过几次这种情况了,测试演员是否正确处理上述情况的正确方法是什么?


您可以使用单独的探针观察被测参与者的终止情况,而不是尝试通过“发送者”探针来执行此操作:

val probe = TestProbe(system)
val deathWatcher = TestProbe(system)

val target = TestActorRef(Props(classOf[Handler]))
deathWatcher.watch(target)

probe.send(target, Init)
// TODO make sure the message is processed.. perhaps ack it?

probe ! Kill

deathWatcher.expectTerminated(target)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Akka TestProbe 测试 context.watch() / 终止处理 的相关文章

  • Akka-http:如何从请求中获取自定义标头?

    我在请求中将以下标头发送到我的 akka http api Content type application json Accept application json AppId some id 如何在我的 akka http 路由中获取
  • 用于 REST 轮询的 Akka

    我正在尝试将大型 Scala Akka PlayMini 应用程序与外部 REST API 连接起来 这个想法是定期轮询 基本上每 1 到 10 分钟 根 URL 然后爬取子级 URL 以提取数据 然后将其发送到消息队列 我想出了两种方法来
  • Akka 和 Typesafe 配置版本问题

    我尝试在 Tomcat 服务器上使用 akka 2 1 0 但我收到一个错误 要求我将配置库也放在类路径上 好吧 这不是问题 我将 Typesafe 的配置库 版本 1 0 0 最新 放在 lib 文件夹中 但是 我总是收到错误 8d315
  • 自定义 Spring Bean 参数

    我正在使用 activator 上发布的 Spring Akka 示例来创建 Spring 托管 bean actor 这是我当前使用的代码 包括演示类 Component class Test extends UntypedActor A
  • Akka TestProbe 测试 context.watch() / 终止处理

    我正在使用 TestKit 测试 akka 系统 我正在测试的系统的一个参与者在收到某种消息类型后 context watches 发送者 并在发送者死亡时自杀 trait Handler extends Actor override de
  • 远程创建 Akka Actor,无需新的 ActorSystem

    我已经仔细阅读了文档好几次了 http doc akka io docs akka 2 1 4 scala remoting html http doc akka io docs akka 2 1 4 scala remoting html
  • 如何使用 Akka HTTP 从多个参与者/Web 处理程序正确调用单个服务器?

    我有一个服务 我们称之为服务 A 它使用 Akka Server HTTP 来处理传入请求 我还有第 3 方应用程序 服务 B 它提供了多种 Web 服务 服务 A 的目的是转换客户端请求 调用服务 B 的一个或多个 Web 服务 合并 转
  • 通过连接池发出 http 请求时 Akka Flow 挂起

    我正在使用 Akka 2 4 4 并尝试从 Apache HttpAsyncClient 迁移 未成功 下面是我在项目中使用的代码的简化版本 问题是 如果我向流程发送超过 1 3 个请求 它就会挂起 到目前为止 经过6个小时的调试 我什至找
  • 如何检测scala执行上下文耗尽?

    我的 Playframework 应用程序有时没有响应 我想在运行时检测到这一点 记录有关当前在耗尽的执行上下文上运行的内容的信息 实现这一目标的最佳策略是什么 我考虑过将小型可运行对象发布到执行上下文 如果它们没有及时执行 我会记录一条警
  • Scala.2.10.1 的标准库还是 Akka?

    我要使用Futures and Promises from scala concurrentScala 中的包2 10 1 我应该使用Akka反而 Akka future 和 Promise 在 2 10 中被移入 Scala 标准库 所以
  • 如何确定 akka 中生成的 actor 数量?

    我最近开始研究 Akka 2 0 框架 并且能够运行一些代码 生成执行简单 Oracle 数据库调用 执行简单计算等的 Actor 但是在生产中什么也没有 我想知道的是 是否有一般的经验法则或最佳实践来确定为某些类型的任务生成多少个参与者
  • Akka 流如何不断实现?

    我在用阿卡流 http doc akka io docs akka stream and http experimental 1 0 scala stream index html在 Scala 中进行轮询AWS SQS https aws
  • Akka HTTP 连接池在几个小时后挂起

    我有一个 HTTP 连接池 在运行几个小时后挂起 private def createHttpPool host String SourceQueue HttpRequest Promise HttpResponse val pool Ht
  • 如何将 sbteclipse 插件添加到 SBT 0.10.x

    我想查看akka的源代码 似乎使用的是0 7 x版本的sbt 我将项目配置转换为0 10 x版本 当我在库依赖项中添加 sbteclipse 并运行 eclipse create src 生成 eclipse 项目时 它告诉 eclipse
  • 如何使 scalatest 与 Spraytestkit 和 HttpServiceActor 一起工作

    我在看Spray 1 3 1 测试套件文档 http spray io documentation 1 2 1 spray testkit 但找不到下面我需要的正确示例 我有这个样本spray 1 3 1 service trait MyS
  • 如何解析 Spray-routing 中的 get 请求参数?

    这就是代码部分的样子 get respondWithMediaType MediaTypes application json entity as HttpRequest obj gt complete println obj ok 我可以
  • Akka Scheduler() 每次重复都会迟到

    我有一个简单的调度程序 用于每 1 秒重复一次任务 Cancellable task Akka system scheduler schedule Duration create 0 TimeUnit MILLISECONDS Durati
  • akka-http:找不到参数解组的隐式值

    我的 Spray json 支持看起来像这样 object MarshallingSupport extends SprayJsonSupport implicit def json4sFormats Formats DefaultForm
  • 使用 Akka 玩 2.5 - 找不到参数超时的隐式值:akka.util.Timeout

    我正在尝试使用 Play 2 5 测试 Akka 但遇到了一个似乎无法解决的编译错误 我正在关注 Play 文档中的此页面 https playframework com documentation 2 5 x ScalaAkka http
  • 如何使用 Akka BoundedMailBox 来限制生产者

    我有两个演员 一个正在生成消息 另一个正在按某个时间消费消息固定利率 是否有可能让生产者受到消费者 BoundedMailBox 的限制 背压 我的生产者当前是定期计划的 向其发送一条勾选消息 有没有办法根据消费者邮箱中的可用性来计划它 我

随机推荐