0

リモートの Akka (2.0.5) アクターに多くのメッセージを送信する統合テストがあります。各テストの実行後、リモート アクター ツリーが再起動されます。デバッグ レベルのログ メッセージによると、43 回のテスト実行が成功した後、リモート アクターは自分自身に応答を送信し始めました。これにより、明らかにテストが失敗しました。

なぜこれが起こるのでしょうか?

私がこれらのタイプのメッセージを送信しているコードベースの場所は 1 つだけであり、それは明確に述べています。

sender ! generateTheMessage()
4

1 に答える 1

1

私の特定のケースでなぜそれが起こっているのかを理解しました。ここには、実際には 2 つのアクターが関与しています。

A -> B

システムが初期化されるまで、最初はメッセージをキューに入れます。次に、キューに入れられたメッセージを B に送信し、それ以降のすべてのメッセージが到着するとすぐに B に転送します。

問題は、キューに入れられたメッセージを転送するときに、元の送信者情報が失われ、A が送信者になることです。したがって、B からの返信は A に返され、B に再び転送されます。転送のロギングを有効にしていないため、最初は後者の転送が行われていることに気づきませんでした。

したがって、それは競合状態です。システムがすぐに起動する場合はすべて問題ありませんが、そうでない場合は最初の応答の一部が誤って送信されます。

これを修正した方法は、キューに入れられた各メッセージと送信者をペアにし、キューに入れられた各メッセージを Java API を使用して再送信することでした。これにより、送信者を明示的に指定できます。

于 2013-01-22T09:36:31.513 に答える