无法为RoundRobinPool的路由配置有界邮箱

时间:2016-09-01 06:44:14

标签: scala akka

当我尝试在配置文件中为池的路由(RoundRobinPool)设置有界邮箱时,Akka会以某种方式忽略邮箱配置。

这是我使用的配置:

bounded-mailbox {
    mailbox-type = "akka.dispatch.BoundedMailbox"
    mailbox-capacity = 1
    mailbox-push-timeout-time = 1s
}

akka.actor.deployment {
    /singletestactor {
        mailbox = bounded-mailbox
}

    /groupedtestactor {
        mailbox = bounded-mailbox

        router = round-robin-pool
        nr-of-instances = 5
    }
}

这是测试代码:

object MailboxTest {
  def main(args: Array[String]): Unit = {
    val actorSystem = ActorSystem()
    val singleTestActor = actorSystem.actorOf(Props[TestActor], "singletestactor")
    for (i <- 1 to 10) {
      singleTestActor ! Hello(i)
    }


    val groupedTestActor = actorSystem.actorOf(Props[TestActor].withRouter(FromConfig, "groupedtestactor")
    for (i <- 1 to 1000) {
      groupedTestActor ! Hello(i)
    }
  }
}

class TestActor extends Actor {
  def receive = {
    case Hello(i) => {
      println(s"Hello($i) - begin!")
      Thread.sleep(10000)
      println(s"Hello($i) - end!")
    }
  }
}

case class Hello(i: Int)

我做错了什么,或者没有办法为路线定义邮箱?

1 个答案:

答案 0 :(得分:0)

您需要在application.conf中添加mailbox.requirements配置;

akka.actor.mailbox.requirements {
  "akka.dispatch.BoundedMessageQueueSemantics" = bounded-mailbox
}

然后需要像这样扩展TestActor;

class TestActor extends Actor with RequiresMessageQueue[BoundedMessageQueueSemantics]

有关邮箱配置,请参阅文档here

我也像这样创建了循环池;

val groupedTestActor = actorSystem.actorOf(FromConfig.props(Props[TestActor]), "groupedtestactor")
相关问题