Bisuness Logic
我们需要完成以下业务逻辑:
100万次:
当前的Akka解决方案
我们目前拥有的Akka解决方案可以创建100万个负责一个文件下载的演员,一旦完成,他们就会创建一个演员来处理2,3,4步骤。
问题
一旦我们运行这个过程,我们就遇到了Akka优先考虑下载演员的情况,其余演员都处于饥饿模式。
我们知道,由于下载演员不断下载,因此机器磁盘已满,但其他演员没有机会扫描和删除文件。
问题
感谢。
答案 0 :(得分:1)
对两种类型的actor使用不同的调度程序:
在您的配置中,您可以定义一个单独的调度程序(例如):
my-dispatcher {
type = Dispatcher
executor = "thread-pool-executor"
thread-pool-executor {
fixed-pool-size = 32
}
throughput = 100
}
然后您可以在创建时将其分配给特定的演员:
val myActor = context.actorOf(Props[MyActor].withDispatcher("my-dispatcher"), "myactor1")
调度程序实际上是线程池。分开这两个保证缓慢的阻塞操作不会使另一个挨饿。一般来说,这种方法被称为批量标题,因为这个想法是,如果应用程序的一部分失败,其余部分仍然保持响应。
有关详细信息,请参阅the documentation