首页 文章

如何使用Akka Actor永远运行一个守护进程?

提问于
浏览
-1
  • 我的项目是 not ,使用 Akka 截至目前,它作为一个进程运行,并做了太多的事情 .

  • 作为第一个初始步骤,我们正在尝试将脚手架放置到位,以便我们获得Fault Tolerance . 例如,

ProjectSupervisor
|
ExistingProcessActor

ExistingProcessActor 将作为一个永远长期运行的工作运行,如果因为一些 Exception 而被杀死, ProjectSupervisorrestart

我对此并不太确定,所以我在user-group问过,并收到了一个有趣的建议

[Me] def run:Unit = LogReaderDisruptor.main(Array())是一个应该永远运行的方法,加上它需要一些设置(可在客户端的机器或测试环境中使用)[建议在这里]由此做你的意思是main()永远不会返回?如果是这样,那么你将阻止Actor并浪费整个线程 . 将其发送给专门的调度员(参见调度员和期货文档) .

我浏览了文档,但没有理解我需要做什么 .

这是否意味着以下?

  • ExistingProcessActor将通过提供 PinnedDispatcher 类型的自定义调度程序来启动新的 future

  • 如果是,那么在任何失败的情况下如何通知_907624?他正在监视 ExistingProcessActor 而不是 futurefuture 不是 Actor

我很困惑,请指导我

1 回答

  • 1

    您不需要使用Future就可以在专用调度程序中完成工作 . 这可以通过生成一个actor并将该actor分配给专用调度程序来完成 . akka文档中的一个简单示例:

    val myActor =
      context.actorOf(Props[MyActor].withDispatcher("my-dispatcher"), "myactor1")
    

    http://doc.akka.io/docs/akka/snapshot/scala/dispatchers.html

    您可以在创建 ExistingProcessActor 时在项目主管内执行此操作,将该actor放在固定的调度程序上,然后您的监督策略将继续按您的需要运行 .

相关问题