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

时间:2015-05-30 04:41:05

标签: java multithreading scala akka

  • 到目前为止,我的项目使用var str = '<!-- A comment -->'; var newstr = str.replace(/<\!--(.*?)-->/, '$1'); console.log(newstr); // A comment ,它作为一个进程运行并执行太多操作。

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

Akka

ProjectSupervisor | ExistingProcessActor 作为一个永久性的长期工作运行,如果由于某些ExistingProcessActor而被杀,ExceptionProjectSupervisor

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

  

[Me] def run:Unit = LogReaderDisruptor.main(Array())
  是一种应该永远运行的方法,还需要一些设置(可在客户端的机器或测试环境中使用)

     

[这里的建议]你做到了   意味着main()永远不会返回?如果是这样,那么你就会阻止   演员和浪费整个线程。在专用上产生这个   调度员(见调度员和期货文件)。

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

这是否意味着以下?

  • ExistingProcessActor会通过提供restart类型的自定义调度程序来启动新的future吗?
  • 如果是,那么如果失败,将如何通知PinnedDispatcher?他正在监控ProjectSupervisor而非ExistingProcessActorfuture不是future

我很困惑,请指导我

1 个答案:

答案 0 :(得分:1)

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

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

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

您可以在创建ExistingProcessActor时在项目主管内执行此操作,将该角色放在固定调度员上,然后您的监督策略将继续按您的需要工作。