2017-05-17 14 views
1

私はアクカストリームを使ってスロットルを実装していて、ほとんど動作しています。メッセージのリストを毎回1つずつ送信したいので、ほとんど効果があります。 AkkaのActorsがコール・アクターの前にメサージを蓄積できるかどうかはわかりません。コールの前にメッセージを蓄積するアクタのアクタ

私は、以下の例はシンプルですが実際のシナリオでは、RabbitMQから数多くのメッセージを受け取り、あまりにも高いレートを避けるために数秒後に俳優に電話したいと思っています。 Webサービスを呼び出します。ここで

は私がやったことです:私の例で

import akka.NotUsed 
import akka.actor.{Actor, ActorRef, ActorSystem, Props} 
import akka.stream.{ActorMaterializer, OverflowStrategy, ThrottleMode} 
import akka.stream.scaladsl.{Sink, Source} 

import scala.concurrent.duration._ 

object AkkaStream { 
    def main(args:Array[String]): Unit = { 
    val system = ActorSystem("HelloSystem") 
    val actor = system.actorOf(Props[ToughActor]) 
    implicit val materializer = ActorMaterializer.create(system) 
    val throttler: ActorRef = 
     Source.actorRef(bufferSize = 1000, OverflowStrategy.dropNew) 
     .throttle(2, 5.second, 2, ThrottleMode.Shaping) 
     .to(Sink.actorRef(actor, NotUsed)) 
     .run() 

    throttler ! CoolThing("message 1") 
    throttler ! CoolThing("message 2") 
    throttler ! CoolThing("message 3") 
    throttler ! CoolThing("message 4") 
    throttler ! CoolThing("message 5") 
    } 
} 

class ToughActor extends Actor { 
    def receive = { 
    case x => println(x.getClass) 
    } 
} 

case class CoolThing(name: String) 

、私が代わりにreceiveが二度呼ばれることreceive機能に最大2つのオブジェクトのコレクションを受け取りたいです。

2つのメッセージ(例:CoolThing("message 1")CoolThing("message 2"))を送信した場合、俳優にはList(CoolThing("message 1"), CoolThing("message 2")を受け取ることができますか?

答えて

関連する問題