有没有办法暂停akka演员X时间

时间:2018-04-10 17:48:14

标签: java akka

我们有一个Akka演员正在阅读包含许多文件的大文件夹。

它读取它们以处理其他演员。

看起来它读得太快,最终我们遇到了OutOfMemoryException

我们想知道我们是否可以在某种程度上pause/sleep X时间?

2 个答案:

答案 0 :(得分:1)

你可以自己暂停,我的意思是你应该让演员停止处理文件并设置一个计时器,在X秒/分钟后发送一条resume消息。

但是......你永远找不到合适的时间(上面的X),它总是太长或太短。这种问题是akka-stream存在的原因。我建议你看看它,因为它是解决这类问题的唯一好方法。

答案 1 :(得分:0)

对于内存不足问题,您可以增加actor邮箱的队列大小。 对于睡眠/暂停,您可以使用调度程序将消息安排给演员一段特定的时间。 没有必要明确地让一个actor睡觉:使用循环并对每个actor做出反应意味着底层线程池将有等待线程,而没有消息供actor处理。

如果您要为要处理的actor安排事件,使用java.util.concurrent实用程序中的单线程调度程序非常容易:

object Scheduler {
import java.util.concurrent.Executors
import scala.compat.Platform
import java.util.concurrent.TimeUnit
private lazy val sched =Executor.
new SingleThreadScheduledExecutor();
def schedule(f: => Unit, time: Long) {
sched.schedule(new Runnable {
def run = f
},
time , TimeUnit.MILLISECONDS)}}