Akka演员道具工厂

2024-01-02

我和阿卡正在互相了解。

From : Akka 2.3.6(当前)Actor 推荐实践 http://doc.akka.io/docs/akka/current/scala/actors.html#actorselection-scala#Props

这是一个名为 DemoActor 的示例 actor:

class DemoActor(magicNumber: Int) extends Actor {
  def receive = {
    case x: Int => sender() ! (x + magicNumber)
  }
}

In 推荐做法该文档的部分指出:“在每个 Actor 的伴随对象上提供工厂方法是一个好主意,这有助于保持合适的 Props 的创建尽可能接近 Actor 的定义。”他们喜欢这样做:

object DemoActor {
  def props(magicNumber: Int): Props = Props(new DemoActor(magicNumber))
}

Question : 为 props 方法指定工厂有什么区别:

object DemoActor {
  def props(magicNumber: Int): Props = Props(classOf[DemoActor], magicNumber)
}

如果您错过了,区别在于 Props 构造函数的参数:

new DemoActor(magicNumber)

VS

classOf[DemoActor], magicNumber

来自同一个 akka 文档页面,在道具部分 http://doc.akka.io/docs/akka/current/scala/actors.html#Props,它在使用时还提到Props(classOf[ActorWithArgs], "arg1"): “在构造 Props 对象期间会验证是否存在匹配的构造函数,如果没有找到或找到多个匹配的构造函数,则会导致 IllegalArgumentEception。”

这样也好不是吗?!?......


这样也好不是吗?!?......

是的,但是如果可以在编译时捕获错误就更好了。直接调用构造函数的好处是编译器会捕获没有匹配构造函数的问题,而不是在运行时抛出异常。

一件有趣的事情是关于Props apply方法是当你写:

Props(new DemoActor(magicNumber))

创建 Props 实例时,不会立即调用 actor 的构造函数。构造函数调用已传递by name而不是by value。您可以在签名中看到这一点Props apply method:

def apply[T <: Actor](creator: ⇒ T)(implicit arg0: ClassTag[T]): Props

请注意创建者参数中的右箭头。这允许推迟创建者的构建,并可能在远程参与者的另一个进程中执行。

这里的一个潜在危险是如果new操作关闭范围并捕获不打算序列化或不可序列化的值,从而使 Props 对象也不可序列化。这就是为什么文档建议在参与者的伴随对象中执行此操作,以最大限度地降低关闭不打算序列化的数据的风​​险。

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

Akka演员道具工厂 的相关文章

  • 为 testProbe 提供 ActorPath

    我有一些代码使用 ActorPath 而不是 ActorRef 向演员发送消息 system actorSelection user myActor a message 我需要确保这条消息确实被发送了 因此 我需要在测试中创建一个位于此 a
  • 远程创建 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
  • 如何通过 Scala 中的 Play Framework 2.5 流式传输压缩文件(即时)?

    我想流式传输一些文件并即时压缩它们 以便用户可以将多个文件下载到一个压缩文件中 而无需向本地磁盘写入任何内容 但是 我当前的实现将所有内容保存在内存中 并且不适用于大文件 有什么办法可以解决吗 我正在研究这个实现 https gist gi
  • 通过连接池发出 http 请求时 Akka Flow 挂起

    我正在使用 Akka 2 4 4 并尝试从 Apache HttpAsyncClient 迁移 未成功 下面是我在项目中使用的代码的简化版本 问题是 如果我向流程发送超过 1 3 个请求 它就会挂起 到目前为止 经过6个小时的调试 我什至找
  • Akka 的语言和产品替代品是什么?

    现在我正在看游戏框架 https www playframework com 并且非常喜欢它 Play 中提供的功能中最受宣传的部分之一是Akka http akka io 为了更好地理解 Akka 以及如何正确使用它 您能告诉我其他语言或
  • 如何检测scala执行上下文耗尽?

    我的 Playframework 应用程序有时没有响应 我想在运行时检测到这一点 记录有关当前在耗尽的执行上下文上运行的内容的信息 实现这一目标的最佳策略是什么 我考虑过将小型可运行对象发布到执行上下文 如果它们没有及时执行 我会记录一条警
  • 我应该使用 akka.http.scaladsl.util.FastFuture 而不是 scala.concurrent.Future 吗?

    我应该使用 akka http scaladsl util FastFuture 而不是 scala concurrent Future 吗 评论说 Provides alternative implementations of the b
  • Akka HTTP 连接池在几个小时后挂起

    我有一个 HTTP 连接池 在运行几个小时后挂起 private def createHttpPool host String SourceQueue HttpRequest Promise HttpResponse val pool Ht
  • Akka Testkit 错误且版本不明确

    我正在使用 Akka testkit 库来测试我的一些演员 这是我的 build sbt 中的内容 com typesafe akka akka testkit 2 6 10 Test 这是我得到的错误 java lang IllegalS
  • Akka 和 ReactiveMongo

    我正在尝试找到在集群工作人员之间共享相同连接池的最佳方法 我有以下结构 Master Actor gt Worker Actors 最多 100 个或更多 gt MongoDB 我想在工作人员和 MongoDB 之间放置reactivemo
  • 如何使 scalatest 与 Spraytestkit 和 HttpServiceActor 一起工作

    我在看Spray 1 3 1 测试套件文档 http spray io documentation 1 2 1 spray testkit 但找不到下面我需要的正确示例 我有这个样本spray 1 3 1 service trait MyS
  • 睡觉的演员?

    让演员睡觉的最佳方式是什么 我将参与者设置为代理 希望维护数据库的不同部分 包括从外部源获取数据 由于多种原因 包括不使数据库或通信过载以及一般负载问题 我希望参与者在每个操作之间休眠 我正在看大约 10 个演员对象 参与者将几乎无限地运行
  • 如何解析 Spray-routing 中的 get 请求参数?

    这就是代码部分的样子 get respondWithMediaType MediaTypes application json entity as HttpRequest obj gt complete println obj ok 我可以
  • 玩 Scala Akka WebSockets 更改 actor 路径

    我遵循使用 Scala Play 和 Akka Actor 创建 Web 套接字的示例 https www playframework com documentation 2 5 x ScalaWebSockets Handling Web
  • 知道 akka actor 何时完成

    有几个人和我一起从事一个项目 一直在试图找出解决这个问题的最佳方法 看起来这应该是经常需要的标准东西 但由于某种原因我们似乎无法得到正确的答案 如果我有一些工作要做 并且我向路由器抛出一堆消息 我如何知道所有工作何时完成 例如 如果我们正在
  • Akka Stream Graph 恢复问题

    我创建了一个图表来并行化具有相同输入的两个流 这些流产生 Future Option Entity 如果 flowA 失败 我想返回 Future None 但恢复似乎没有被调用 val graph Flow Input Future Op
  • 何时使用本地演员和远程演员?

    我什么时候应该在 Akka 中使用 Actors 和 Remote Actors 据我所知 两者都可以扩展机器 但只有远程 Actor 可以扩展 那么普通 Actor 有任何实际的生产用途吗 如果远程 Actor 仅具有较小的初始设置开销
  • Akka 和 spring 配置

    我正在尝试将 akka 与 spring 结合起来 但没有成功 基本上 我的应用程序似乎不习惯读取 akka 模式 具有架构的 service context xml 的一部分
  • 如果需要,Akka actor 可以从邮箱中删除消息吗?

    例如 如果我想从队列中删除冗余消息 这样当演员收到Connect消息 它应该检查它的邮箱并删除其他Connect消息 以便只进行一个连接而不是多个连接 这样的事情可能吗 是的 您可以将参与者调度程序配置为具有您选择的任何邮箱 因此如果您实现
  • Java / Scala Future 由回调驱动

    简洁版本 我怎样才能创建一个Promise

随机推荐