应该如何创建一个可能抛出异常的 akka actor?

2024-01-29

我正在将一个项目从 scala Actor 迁移到 Akka Actor。我曾经有过类似的情况,如果某个系统资源不可用,MyActor 的构造函数可能会抛出异常:

var myActor: MyActor = null
try {
  myActor = new MyActor(3)
}
catch {
  case e: SomeUserDefinedException => println("failed!")
}

使用 akka,我将代码迁移到此:

val someParam = 3
var myActor: ActorRef = null
try {
  myActor = context.actorOf(Props(classOf[MyActor], someParam), "myActor")
}
catch {
  case e: SomeUserDefinedException => println("failed!")
}

我遇到的问题是,在 akka 的情况下,context.actorOfcall 实际上并不创建 MyActor 对象本身,而是将其推迟到另一个线程。所以当构造函数抛出异常时,try/catch我放入的块没有效果。

如何将此 scala actor 代码迁移到 akka actor 中?理想情况下,我宁愿避免增加很多额外的复杂性。


您可以在构造函数中捕获异常MyActor并将此异常通知其他参与者(例如家长)。尝试这个:

class MyActor(val parent: ActorRef) extends Actor {
  try{
    throw new RuntimeException("failed construct")
  } catch {
    case e: Throwable => 
        parent ! e
        throw e
  }

  def receive: Actor.Receive = {case _ => }
}

class ParentActor extends Actor {
  val child = context.actorOf(Props(classOf[MyActor], self), "child")
  override def receive = {
    case e: Throwable => println(e)
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

应该如何创建一个可能抛出异常的 akka actor? 的相关文章

随机推荐

  • 集合迭代器中的不完整类型

    我自己编写了一个自定义的 STL 样式容器 它在内部使用 AVL 树来组织数据 现在 在一个项目中 我希望有一个迭代器作为成员 class vertex avl tree
  • 如何在 JavaFX 8 警报中指定按钮的特定顺序

    我需要要求用户确认执行某项操作 确认对话框的按钮组是 是 否 和 取消 我的代码如下 private ButtonType askYesNoCancel String question Alert alert new Alert Alert
  • Linq Join With Include 语句

    IQueryable
  • 软键盘推送布局

    我一直在尝试许多解决方案来防止软键盘出现时推动我的布局 然而 所有的解决方案都不起作用 简而言之 我希望布局中的所有内容 按钮 imageViews 背景 textViews textEdits 在显示软键盘时保持在原位 我不关心它会涵盖什
  • 为什么 Flutter Web 中的按钮没有边距?

    我有以下代码 Scaffold appBar AppBar title Text Test body Center child Column mainAxisAlignment MainAxisAlignment center childr
  • 使用嵌套数组合并两个字典

    我有 2 本词典 a I 1 2 II 1 2 III 1 2 b I 3 4 II 3 4 IV 3 4 我怎样才能合并它们以获得以下结果 c merge dicts a b 其中 c 是 I 1 2 3 4 II 1 2 3 4 III
  • 抽象和概括有什么区别?

    我理解抽象就是把更具体的东西变得更抽象 该东西可能是数据结构或过程 例如 数据抽象 矩形是正方形的抽象 它集中于正方形有两对相对边的事实 而忽略了正方形的相邻边相等的事实 程序抽象 高阶函数map是一个过程的抽象 该过程对值列表执行某些操作
  • 在 Glass GDK 沉浸式应用程序中打开活动时如何使屏幕变亮?

    我有一个 GDK 沉浸式应用程序 其中启动器Activity获得一个SCREEN DIM WAKE LOCK WakeLock 该应用程序还有一个服务 它将接收聊天消息并启动Intent for an Activity显示每一个 每当消息A
  • HTML5 输入类型=日期:我可以使用 JavaScript 打开/关闭日期选择器吗?

    我正在尝试自定义 HTML5 输入 type date 元素 我想添加一个单独的按钮 单击该按钮将切换日期选择器下拉列表的可见性 我找不到任何这方面的信息 非常感谢任何帮助 这是我使用 CSS 制作的解决方案 webkit box sizi
  • 如何检查某个字是否被 PHP 保留?

    有没有一些函数可以检查一个单词是否是reserved http www php net manual en reserved keywords php在 PHP 中还是我可以自己使用它 我可以手动检查它 只需使用它并查看错误或警告 但我需要
  • 从 XSD 生成 Go 结构

    最近打算用Go做一个项目 我的问题是 给定一个 XSD 文件 如何在 Go 中自动生成结构来表示 XML 元素 它类似于使用 xjc 从 XSD 生成 java 类 那么Go中有没有任何工具或包可以做到这一点呢 提前致谢 看起来它可能需要一
  • 从外部连接到 docker 容器中的 Postgresql

    我在 Docker 容器的服务器上有 Postgresql 如何从外部 即我的本地计算机 连接到它 我应该应用什么设置来允许这样做 您可以通过这种方式运行 Postgres 映射端口 docker run name some postgre
  • 将 java 系统属性传递给 ant 测试

    我让 ant 使用以下代码执行 jar
  • 轮播引导程序中的拉伸图像

    我正在使用 Bootstrap 4 那里有一个带有图片的轮播 图像一直显示拉伸 不知道出了什么问题 carousel margin bottom 4rem position relative carousel caption bottom
  • 在非常大的树上执行 DFS 的最佳方法是什么?

    情况是这样的 应用世界由数十万个状态组成 给定一个状态 我可以计算出一组 3 或 4 个其他可到达的状态 一个简单的递归可以构建一个状态树 它会变得非常大且非常快 我需要从根状态到该树中的特定深度执行 DFS 以搜索包含 最小 状态的子树
  • Dalvik 和 Android 工具链可以带来哪些优化?

    我正在开发一个高性能 Android 应用程序 一款游戏 虽然我首先尝试编写代码以提高可读性 但我喜欢在脑海中保留一幅幕后发生的事情的图片 通过 C 我对编译器能为我做什么和不能做什么有了相当好的直觉 我正在尝试为 Java Android
  • 使用 std::vector 调用 std::lock ()

    我想将以下代码替换为std lock for mutex m mutexes m gt lock 无论如何我可以调用std lock 在那些给定的互斥体上std vector
  • 如何在 ActiveSupport::TestCase 中存根方法

    In RSpec我可以像这样存根方法 allow company to receive foo 300 我怎样才能存根一个方法ActiveSupport TestCase 我有一个这样的测试 class CompanyTest lt Act
  • 对文件中所有奇数行求和的 Pythonic 方法

    我正在学习 Python 以便参加研究生院的编程分班测试 这实际上是我为了感受它而编写的第一个小脚本 我的背景主要是C 和PHP 但是我在测试中不能使用任何一种语言 我的测试脚本读取以下文本文件 test file1 txt 偶数行包含样本
  • 应该如何创建一个可能抛出异常的 akka actor?

    我正在将一个项目从 scala Actor 迁移到 Akka Actor 我曾经有过类似的情况 如果某个系统资源不可用 MyActor 的构造函数可能会抛出异常 var myActor MyActor null try myActor ne