【问题标题】:How do I throttle messages in Akka (2.1.2)?如何在 Akka (2.1.2) 中限制消息?
【发布时间】:2013-04-15 03:39:03
【问题描述】:

能否请你们展示在 Akka 中限制消息的示例?

这是我的代码

object Program {
  def main(args: Array[String]) {
    val system = ActorSystem()
    val actor: ActorRef = system.actorOf(Props[HelloActor].withDispatcher("akka.actor.my-thread-pool-dispatcher"))

    val zzz : Function0[Unit] = () => {
      println(System.currentTimeMillis())
      Thread.sleep(5000)
    }

    var i: Int = 0
    while (i < 100) {
      actor ! zzz
      i += 1
    }

    println("DONE")

//    system.shutdown()
  }
}

class HelloActor extends Actor {
  def receive = {
    case func : Function0[Unit] => func()
  }
}

这是我的配置

akka {
  actor {
    my-thread-pool-dispatcher {
      type = Dispatcher
      executor = "thread-pool-executor"
      thread-pool-executor {
        task-queue-type = "array"
        task-queue-size = 4
      }
    }
  }
}

但是当我运行它时,它似乎是单线程的,因为我希望同时处理 4 条消息。

我在这里错过了什么?

【问题讨论】:

    标签: scala akka scala-2.10


    【解决方案1】:

    我看不出问题的标题和内容之间的联系。

    这是一篇关于在 Akka 中限制消息的文章:

    http://letitcrash.com/post/28901663062/throttling-messages-in-akka-2

    但是,您似乎对您的演员一次只处理一条消息这一事实感到困惑。但这就是 Akka 演员的工作方式。他们有一个邮件邮箱,并且在连续循环中一次只处理一封邮件。

    如果你想用同一个工作处理单元同时处理多个任务,我建议你看看路由器:

    http://doc.akka.io/docs/akka/2.1.2/scala/routing.html

    【讨论】:

      【解决方案2】:

      Typesafe 最近宣布了 akka 反应式流。可以使用其背压能力来实现节流。

      http://java.dzone.com/articles/reactive-queue-akka-reactive

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-07-02
        • 2016-07-12
        • 2018-02-16
        • 1970-01-01
        • 1970-01-01
        • 2022-01-11
        • 2016-09-22
        相关资源
        最近更新 更多