0

アクターにメッセージを送信するためにタイムアウト付きの ask パターンを使用していますが、処理に時間がかかる場合があります。タイムアウトになったら、メッセージの処理を停止したいと思います。しかし、攻撃者がメッセージを処理し続けているようで、デッド レターを受け取りました。

タイムアウトの期限が切れたときにアクターがメッセージを処理するのを停止するにはどうすればよいですか?

4

1 に答える 1

3

短い答えは、できないということです。処理を開始すると、Kill または Poison Pill を送信したり、停止したりすると、今後のメッセージの処理が妨げられるだけです。長い答えは、アクターが何らかのループに陥り、ループを停止するための変更可能な (そして潜在的にグローバルに利用可能な) シグナルをチェックしていた場合、おそらくこれを回避できるということですが、そのアプローチには非常に多くの危険信号があります。私がそれについて言及したことさえ忘れてはなりません。そして、長い呼び出しがたまたま DB などへのブロッキング io 呼び出しであった場合は、忘れてください。その呼び出しが完了するまで (または運が良ければタイムアウトするまで)、スタックします。

アクター自体は、誰かがそれを経由して呼び出したことを認識しておらず、タイムアウトする可能性askのあるアップストリームがあります。Futureこれの概念がないため、タイムアウトしたときにそれに応じて反応することはできませんFuture

于 2013-07-18T16:19:47.937 に答える