使用流vs角色执行定期任务

问题描述 投票:0回答:1

我正在使用akka / scala / play堆栈。

通常,我使用流来执行某些任务。例如,我有一个流,它每分钟都会醒来,从数据库中拾取一些东西,然后调用另一个服务以使用API​​丰富其数据并将丰富的内容保存到DB。

类似这样:

class FetcherAndSaveStream @Inject()(fetcherAndSaveGraph: FetcherAndSaveGraph, dbElementsSource: DbElementsSource)
                                     (implicit val mat: Materializer,
                                      implicit val exec: ExecutionContext) extends LazyLogging {

  def graph[M1, M2](source: Source[BDElement, M1],
                    sink: Sink[BDElement, M2],
                    switch: SharedKillSwitch): RunnableGraph[(M1, M2)] = {

    val fetchAndSaveDataFromExternalService: Flow[BDElement, BDElement, NotUsed] =
      fetcherAndSaveGraph.fetchEndSaveEnrichment

    source.viaMat(switch.flow)(Keep.left)
      .via(fetchAndSaveDataFromExternalService)
      .toMat(sink)(Keep.both).withAttributes(supervisionStrategy(resumingDecider))

  }


  def runGraph(switchSharedKill: SharedKillSwitch): (NotUsed, Future[Done]) = {
    logger.info("FetcherAndSaveStream is now running")
    graph(dbElementsSource.dbElements(), Sink.ignore, switchSharedKill).run()
  }
}

我想知道,这比仅仅使用一个演员每分钟跳动并执行类似操作更好吗?为此和流使用actor的比较是什么?

试图弄清楚何时应该选择哪种方法(流/演员)。谢谢!!

我正在使用akka / scala / play堆栈。通常,即时消息使用流来执行某些任务。例如,我有一个流,它每分钟都会醒来,从数据库中拾取某些东西,然后调用另一个...

scala playframework akka actor akka-stream
1个回答
0
投票

您可以同时使用这两种方法,具体取决于此处未列出的解决方案要求。您需要考虑的一般问题-角色比流更底层的角色,因此他们需要更多的代码和调试。

© www.soinside.com 2019 - 2024. All rights reserved.