5

OOM を回避するために、共有カスタム ディスパッチャーを使用して、一部の Akka 1.1.3 アクターのメールボックス サイズを制限しています。例えば:

object Static {
    val dispatcher = Dispatchers.newExecutorBasedEventDrivenWorkStealingDispatcher(
        "customDispatcher",
        1000,
        BoundedMailbox(capacity = 10)
    )
}

class MyActor extends Actor {
    self.dispatcher = Static.dispatcher
    ...
}

メールボックスのオーバーフローに対応して、上流のプロデューサーに一時停止するようにメッセージを送ることができるようにしたいと思います (補足: 悲しいことに、 のように見えますがactor.stop()、待つとactor.start()がスローされますActorStartException)。キューがいっぱいになってからキューが少し消耗するまでの間に、ある程度のデータ損失は許容されます。

ディスパッチャーに関するAkkaの章は言う

アクターにメッセージを送信しようとすると、pushTimeout で指定された時間内にメッセージをメールボックスに追加できない場合、MessageQueueAppendFailedException(“BlockingMessageTransferQueue transfer timed out”) がスローされます。

この例外はどこでキャッチできますか?

myActor ! messageドキュメントでは、try/catch ですべてをラップする必要があるように聞こえます。そうですか?取り扱いを一元化したいと思います。Supervisorおそらくそれを傍受してハンドラーを実行できますか?

4

1 に答える 1

0

akka または twitter の finagle の上に構築されているため、cc.spray.json._ を使用してみてください。

于 2012-12-12T16:23:53.520 に答える