3

これが私のミッション クリティカルなアプリケーションのシナリオです。アクター A は、リソースを集中的に使用する作業を行い、別の物理 UNIX ボックスでアクター B にメッセージを送信します。B は外部ネットワーク要素にアクセスしており、メッセージの処理に時間がかかる場合があります。その後、B は処理結果を A に送り返します。

Q1: A は B のパスを使用して B を検索します。B の UNIX ボックスがダウンしているか、B がまだ起動していない場合、ルックアップは失敗します。akka doc によると、actor ref のようなデッドレターが返されます。通常のアクター ref またはデッドレターのようなアクター ref が返されるかどうかをテストするにはどうすればよいですか?

Q2: B の通常のアクター ref が return であるとします。A が B.tell() を使用してメッセージを B に送信し、そのメッセージが永続的な B のメールボックスに到達しなかった場合、A が永続的なメールボックスを使用してローカル アクター C にメッセージを送信できるようになったことをどのように知ることができますか? C は、成功するまで永遠に B にメッセージを配信しようとします。

4

1 に答える 1

3

答え 1:

system.actorFor(someRemotePath)は常にリモートのアクター ref を提供し、この ref を調べて、それが指しているアクターが存在するか到達できるかどうかを調べる方法はありません。指定された URI にアクターが存在するかどうかを確認する唯一の方法は、メッセージを送信することです。応答を取得した場合は、アクティブであり、ある程度の時間経過しても応答がない場合は、ダウンしていると見なす必要があります。または再試行します—ただし、ファイアウォールの再起動などのために応答メッセージが失われた可能性は非常に高いです.

答え 2:

アクター C は、すべての問題の解決策です。常に C に送信し、メッセージが最終的にリモート アクターによって確認されるようにする必要があります。特定のメッセージがメールボックスに配信されたかどうかを Akka 内で確認する方法はありません。これは、とにかくアクターがメッセージを正常に処理できることを意味しないためです。

一般に、特にミッション クリティカルなアプリケーションを実装する前に、メッセージ配信の保証に関するドキュメントを読むことをお勧めします。

于 2013-02-03T08:57:22.143 に答える