协调Akka的批处理

协调Akka的批处理,akka,batch-processing,Akka,Batch Processing,我需要在Akka一个接一个地批处理2个大文件,我正试图找出在控制角色中协调这些文件的最佳方法。可以并行处理每个文件中的行,但必须先处理第一个文件中的所有行,然后才能处理第二个文件中的任何行 我在考虑有以下演员: File1WorkerActor—处理第一个文件中的一行 File2WorkerActor—处理第二个文件中的一行 File1Actor—将第一个文件中的行委托给多个辅助角色 File2Actor—将第二个文件中的行委托给多个辅助角色 TopLevelActor—要求File1Acto

我需要在Akka一个接一个地批处理2个大文件,我正试图找出在控制角色中协调这些文件的最佳方法。可以并行处理每个文件中的行,但必须先处理第一个文件中的所有行,然后才能处理第二个文件中的任何行

我在考虑有以下演员:

  • File1WorkerActor—处理第一个文件中的一行
  • File2WorkerActor—处理第二个文件中的一行
  • File1Actor—将第一个文件中的行委托给多个辅助角色
  • File2Actor—将第二个文件中的行委托给多个辅助角色
  • TopLevelActor—要求File1Actor处理文件1,等待其完成,然后要求File2Actor处理文件2
我不确定的是,文件参与者如何知道所有工作人员何时完成,TopLevelActor如何知道File1Actor何时完成


我认为FileActor只需为给定文件中的行数保留一个计数器,工作人员就会为每个处理过的行返回一条消息。计数器倒计时后,它将向TopLevelActor发送一条消息。这种方法有什么问题吗?还是最好在将来实施某种处理方式?

我觉得您的解决方案很正确。另外,您可能会对检查FSM和/或成为/取消角色功能感兴趣,以避免在上一个任务未完成时向工作人员提交另一个任务

听起来您想实现异步fork join:我最终使用Derek Wyatt在本博文中描述的工作拉动模式实现了这一点: