我有一个包含2个actor的系统,它们共享相同的配置。这个所需的配置是:“邮箱的最大容量应为1条消息,并且应丢弃任何溢出的消息”。
设置此内容的最简单方法是什么?
我已尝试将以下内容放入(Play Framework)application.conf
:
akka.actor.default-mailbox {
mailbox-type = "akka.dispatch.BoundedMailbox"
mailbox-capacity = 1
}
但它不起作用:演员的邮箱在忙碌时仍会堆积消息,并在可用时处理每个消息。演员不会对application.conf
的内容发表任何看法,或者上述配置不正确。
有什么想法吗?
答案 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)