11

既存の Java SE アプリを Akka に移行することで、Akka の学習を開始しています。Akka 2.0.3 を使用しています。

ある時点で、アクターを停止するために、メッセージ キューを介して PoisonPill を送信する必要があります。私のアクターは次のようにインスタンス化されます:

ActorRef myActor = actorSystem.actorOf(new Props(MyActor.class), "myActor");

PoisonPill を送信しようとしている宛先:

myActor.tell(PoisonPill.getInstance());

しかし、次のコンパイラ エラーが発生します。

'tell(java.lang.Object)' in 'akka.actor.ActorRef' cannot be applied to '(akka.actor.PoisonPill$)'

私は何を間違っていますか?私は Idea で Java 1.6.0_26 を実行しています (Eclipse で生涯を過ごした後も学習しています)。


編集:

ドキュメントに記載されているこのアプローチも試しましたが、同じコンパイラ エラーが発生し、Idea は Actors クラスが非推奨であると警告します。

import static akka.actor.Actors.*;
extractionActor.tell(poisonPill());
4

3 に答える 3

8

Akkaのドキュメントをお読みください。作成に多くの時間を費やしてきました。

ポイズンピル

アクターにakka.actor.PoisonPillメッセージを送信することもできます。これにより、メッセージの処理時にアクターが停止します。PoisonPillは通常のメッセージとしてキューに入れられ、メールボックスにすでにキューに入れられているメッセージの後に処理されます。

次のように使用します。

   import static akka.actor.Actors.*;
   myActor.tell(poisonPill());

上記のアプローチは2.0.2以降非推奨になりました。これは、新しいAPIです。

ActorRef ref = system.actorOf(new Props(JavaAPITestActor.class));
ref.tell(PoisonPill.getInstance());

上記は私のマシンでコンパイルされるので、IDEAで問題が発生する可能性がありますか?javacでコンパイルしてみて、それが機能するかどうかを確認してください。

于 2012-08-30T13:08:54.757 に答える
0

2019 年 3 月 25 日からの更新

@Viktor Klang と @yash.vyas からの適切な回答は少し古くなっています。Scala 2.12.8と JDK8 (1.8.0_172)の現在の動作構文は次のとおりです。

val accountB = context.actorOf(Props[BankAccount], "accountB")
accountB ! PoisonPill

次のように書くこともできます。

...
accountB ! PoisonPill.getInstance

tell-Method のデフォルトの呼び出しも機能しています。

...
accountB.tell(PoisonPill.getInstance,ActorRef.noSender)
于 2019-03-25T19:52:01.700 に答える