简单的Akka邮箱配置以丢弃溢出的消息

时间:2013-11-06 15:32:55

标签: scala akka actor

我有一个包含2个actor的系统,它们共享相同的配置。这个所需的配置是:“邮箱的最大容量应为1条消息,并且应丢弃任何溢出的消息”。

设置此内容的最简单方法是什么?

我已尝试将以下内容放入(Play Framework)application.conf

akka.actor.default-mailbox {
    mailbox-type = "akka.dispatch.BoundedMailbox"
    mailbox-capacity = 1
}

但它不起作用:演员的邮箱在忙碌时仍会堆积消息,并在可用时处理每个消息。演员不会对application.conf的内容发表任何看法,或者上述配置不正确。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

将actor系统中所有actor的默认邮箱设置为只有一个项目的有界邮箱不是一个好主意,最好将actor配置为使用the Akka documentation中所述的指定邮箱。通过部署或直接在代码中。

您的邮箱配置还需要推送超时,如果您想立即丢弃邮件,可以将其设置为0.

答案 1 :(得分:-2)

如果像我这样你想要一个最大容量为1的邮箱,并且丢弃溢出的邮件,我建议使用java.util.Timer而不是Akka。

这是我在Scala计划中写的:

MyTask.scala:

object MyTask extends TimerTask {
  var isRunning = false;

  def run() {
    if (!isRunning) {
      isRunning = true

      [...]

      isRunning = false
    }
  }
}

在0ms后执行任务,每秒重复一次:

new Timer().schedule(MyTask, 0, 1000)