1

TypedActor.getContext().sender()期待どおりに動作しない既知のケースはありますか?

ファイアアンドフォーゲットモードでは、デフォルトでデフォルトになっていることは知っていますが、deadLetters別の問題が発生しています。

// inside MainActor

IPrintingActor printingActor = create(IPrintingActor.class, PrintingActor.class);
printingActor.blockingPrintln("foo");

上記は通常の呼び出しcreateの単なるラッパーですtypedActorOf

// inside PrintingActor
@Override
public boolean blockingPrintln(String string)
{
   System.out.println(TypedActor.context().sender() + " says " + string);
   return true;
}

出力は

俳優[akka:// MySystem / user /$b]はfooと言います

ただし、このアクターは実際にはTypedActor.context()。self()と同じです。

sender()呼び出しがself()と同じものを返す理由はありますか?メインアクターの印刷ステートメント

アクター[akka:// MySystem / user / $ a]

MainActorと

アクター[akka:// MySystem / user / $ b]

PrintingActorのために。ただし、PrintingActor内では、両方とも次のように印刷されます。

アクター[akka:// MySystem / user / $ b]

よろしくお願いします!

4

1 に答える 1

1

メソッドの呼び出しを示したメッセージの送信者は、常に「ask」パターンによって生成された一時的なアクターになります.../temp/$a。その理由は、応答を受け取るのはアクターではなく、メソッド呼び出しの戻り値として応答値を返す内部エンティティであるためです。したがって、どのように実装されても、メソッドの呼び出しサイトを送信者として囲んでいるアクターの参照は表示されません。

ちなみに、私はあなたの調査結果を再現することはできません(つまり、送信者が.../user/$a類似していたか)が、使用しているAkkaのバージョンも指定していません。

于 2013-03-16T20:41:49.637 に答える