4

私はいくつかのジョブのために一時的な子アクターをスポーンするアクターを持っています。親アクターはアクターごとの情報を単純なマップに保存しています。子がジョブの完了 (成功または失敗) を報告すると、マップをクリーンアップしています。すべて問題ありません。 ...

ジョブが終了すると、子アクターは親に報告し、poisonPill を使用して自分自身を殺します。子供が報告しないために地図に孤児が含まれないようにするために、私は彼らに死の監視もしています...

私には、デス ウォッチは別のサービスのように思えます。したがって、メッセージには、同じアクターからのメッセージの順序付けを尊重する理由がありません。

子から親アクターに送信されたメッセージが Terminated の前に到着するという保証はありますか?

4

1 に答える 1

4

アクターが最後に行うことは、postStop()ライフサイクル フックの実行です。それが戻った後、それ自体でメッセージを送信することはできません。その終了のシステム通知 ( のスーパバイザの戦略で見られるようにhandleChildTerminated(...)) とTerminatedDeathWatch のメッセージは後でディスパッチされます。つまり、最後のメッセージが送信された後に発生します。したがって、メッセージが他のアクター A に送信されpostStop()、そのアクター A もメッセージを受信するように登録されているTerminated場合、それらのメッセージは正しい順序で受信されます (同じ送信者、同じ受信者 => 順序)。

于 2012-05-21T06:47:54.640 に答える