2017-08-08 12 views
0

私のログファイルを見ると、同じ俳優のディスパッチャが分かります。その俳優は一度作成されるので、どのようにすることができますか?それは、クラッシュのために俳優が再開されたということですか? 例:同じ俳優の異なるディスパッチャ

[ERROR] [2017年8月7日19:20:22.618] [私の-SYS-akka.actor.default-ディスパッチャ-21] [アッカ://私の-SYS /ユーザー/ com.domain.FooActor] some_exception

[ERROR] [2017年8月7日19:20:22.619] [私の-SYS-akka.actor.default-ディスパッチャ-26] [アッカ://私-SYS /ユーザー/ com.domain.FooActor] some_exception

[ERROR] [2017年8月7日19:20:22.619] [私の-SYS-akka.actor.default-ディスパッチャ-27] [ akka:/ /my-sys/user/com.domain.FooActor] some_exception

+0

デフォルトのディスパッチャのスレッドと異なるものではありませんか? –

+0

はいです。ロギングconfを見て簡単に確認できます。 – cchantep

+0

@FredericA。アクターは一度作成されます。あなたは詳細を教えていただけますか? – igx

答えて

0

ログが生成されたスレッドを記録するようにロガーが設定されていることは間違いありません。ロガー設定を確認してくださいが、3番目の位置では、スレッド(ログ上のスレッド名:my-sys-akka.actor.default-dispatcher-XX)をログに記録していると思います。

ディスパッチャは、スレッドのプール上で実行するタスクをスケジュールします。定義上、プールは複数のスレッドを持つことができ、ログを通して、あなたのアクターの実行は、単一のディスパッチャーに属する異なるスレッド上でスケジュールされていることがわかります。

特定のログでは、異なるスレッドで実行中にログメソッド(つまり、log.error())が呼び出されただけで、あなたの俳優がクラッシュ/再起動したという明示はありません。これは複数の(潜在的に何百万もの)アクターがいくつかのスレッドを共有することを意図しているためです(デフォルトのディスパッチャーがCPU、コアなどの数に依存します)。

あなたの俳優が常に同じスレッドで動くとは限りません。

アクターが別のディスパッチャーで実行されることはありません(明示的に設定しない限り)。