【问题标题】:Deployment of Akka.net actors in separate processes在单独的进程中部署 Akka.net Actor
【发布时间】:2015-07-21 04:32:28
【问题描述】:

我开始学习 Actor 模型(使用 Akka.net)并计划在当前项目中使用它。我当前的任务是使用 IFilter 从不同文件中提取文本。 IFilter 是一组带有本机代码的 COM 服务器。有时它可能会挂起或处理进度过长。在这种情况下,我需要中止对问题文件的处理,并继续处理队列中的下一个文件。但我需要终止整个进程才能正确清理本机代码。

另一个问题是生产力——在大多数情况下,我无法在单个进程中使用多个线程加载多个内核。我怀疑 IFilter 里面有锁。但是如果我运行我的测试应用程序的多个副本(它模拟多进程模式),我可以充分利用 CPU 的能力。

我的问题是:如何在不同的进程中部署一些参与者

我发现可以通过这种方式在配置中指定 actor 的部署策略(来自 Petabrige 讲座的示例):

<akka>
  <hocon>
    <![CDATA[
        akka {
          actor {
            deployment {
              /charting {
                 # causes ChartingActor to run on the UI thread for WinForms
                dispatcher = akka.actor.synchronized-dispatcher
              }
            }
          }
        }
    ]]>
  </hocon>
</akka>

其他选项有:

  • SingleThreadDispatcher
  • ThreadPoolDispatcher
  • ForkJoinDispatcher

但我在这里找不到在单独进程中部署的选项。

我该如何解决这个问题?

【问题讨论】:

    标签: c# process actor akka.net


    【解决方案1】:

    您可以使用 Akka.Remote 和远程 Actor 部署来完成此任务 - 您可以通过这种方式将 Actor 远程部署到网络上的其他进程中。我在这里列出了我的答案中的一些步骤:I need to communicate with multiple remote actor systems

    如果您想查看如何执行此操作的示例,请查看 Akka.NET 项目中的 RemoteDeploy 示例:https://github.com/akkadotnet/akka.net/tree/dev/src/examples/RemoteDeploy

    【讨论】:

    • 感谢您的回复。我会调查你的例子并在这里写下结果。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    • 1970-01-01
    • 1970-01-01
    • 2020-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多