【问题标题】:How to run a daemon forever using Akka Actor?如何使用 Akka Actor 永远运行守护进程?
【发布时间】:2023-03-17 07:40:01
【问题描述】:
  • 到目前为止,我的项目使用Akka,它作为单个进程运行并且做了太多事情。

  • 作为第一步,我们正在尝试放置一个脚手架,以便我们获得容错。例如,

ProjectSupervisor
     |
ExistingProcessActor

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

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

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

[这里的建议] 你这样做 意味着 main() 永远不会返回?如果是这样,那么你正在阻止 Actor 并浪费了整个线程。在专用的 而是调度程序(请参阅调度程序和期货文档)。

我浏览了文档,但不明白我需要做什么。

这是否意味着跟随?

  • ExistingProcessActor 将通过提供PinnedDispatcher 类型的自定义调度程序来启动新的future
  • 如果是这样,那么如果发生任何故障,如何通知ProjectSupervisor?他正在监视ExistingProcessActor 而不是futurefuture 不是Actor

我很困惑,请指导我

【问题讨论】:

    标签: java multithreading scala akka


    【解决方案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 时在项目主管中执行此操作,将该参与者置于固定调度程序上,然后您的监督策略将继续按您的意愿工作。

    【讨论】:

      猜你喜欢
      • 2013-05-11
      • 2015-09-09
      • 1970-01-01
      • 1970-01-01
      • 2023-03-02
      • 1970-01-01
      • 2020-05-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多