2013-04-15 2 views
2

Не могли бы вы, ребята, показать пример дросселирования сообщений в Акке?Как отключить сообщения в Akka (2.1.2)?

Вот мой код

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 сообщения, которые будут обрабатываться на в то же время.

Что мне здесь не хватает?

ответ

7

Я не вижу связи между заголовком вопроса и контентом.

Вот статья о дросселировании сообщений в Акку:

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

Однако, вы, кажется, озадачен о том, что ваш актер обработки только одно сообщение за один раз. Но так действуют аккские актеры. У них есть один почтовый ящик сообщений, и они обрабатывают только одно сообщение за раз в непрерывном цикле.

Если вы хотите, чтобы справляться с несколькими задачами одновременно с тем же блоком обработки работы я предлагаю вам взглянуть на маршрутизаторах:

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

Смежные вопросы