gpt4 book ai didi

scala - Akka Actor : Need an example to understand some basics

转载 作者:行者123 更新时间:2023-12-03 15:19:51 25 4
gpt4 key购买 nike

我正在修改 Akka 并需要一些建议,如何实现我想到的特定内容。我想要一个 Actor ,我可以发送DownloadFile(URI, File)消息并下载它。由于这可以并行,我不想一个接一个地下载一个文件,但有并发下载的限制。

用 Akka 建模这样的东西的预期方法是什么?想到的其他事情是:如果其中一位“ worker ” Actor 因某种原因死亡,会发生什么?如何重试下载?等等等等。

我知道这是一个非常大的问题,但我希望有人花时间回答它!谢谢!

最佳答案

试一试;它创建了三个 - 但您可以将其配置为创建任意数量的下载器,以便可以同时处理三个下载请求。

sealed trait DownloaderMessage
case class DownloadFile(uri: URI, file: File) extends DownloaderMessage

object Downloader {
val dispatcher = Dispatchers.newExecutorBasedEventDrivenWorkStealingDispatcher("pool").build
}

class Downloader extends Actor {
self.lifeCycle = Permanent
self.dispatcher = Downloader.dispatcher
def receive = {
case DownloadFile(uri, file) =>
// do the download
}
}

trait CyclicLoadBalancing extends LoadBalancer { this: Actor =>
val downloaders: List[ActorRef]
val seq = new CyclicIterator[ActorRef](downloaders)
}

trait DownloadManager extends Actor {
self.lifeCycle = Permanent
self.faultHandler = OneForOneStrategy(List(classOf[Exception]), 5, 5000)
val downloaders: List[ActorRef]
override def preStart = downloaders foreach { self.startLink(_) }
override def postStop = self.shutdownLinkedActors()
}

class DownloadService extends DownloadManager with CyclicLoadBalancing {
val downloaders = List.fill(3)(Actor.actorOf[Downloader])
}

关于scala - Akka Actor : Need an example to understand some basics,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4594456/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com