java - 在 Java 中向 Actor 发送 PoisonPill

标签 java scala actor akka

我开始通过将现有的 Java SE 应用程序迁移到 Akka 来学习它。我正在使用 Akka 2.0.3。

有一次我需要通过消息队列发送一个 PoisonPill 来停止 actors。我的 Actor 是这样实例化的:

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());

最佳答案

请阅读 Akka 文档,我们花了很多时间创建它:

PoisonPill

You can also send an actor the akka.actor.PoisonPill message, which will stop the actor when the message is processed. PoisonPill is enqueued as ordinary messages and will be handled after messages that were already queued in the mailbox.

Use it like this:

   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 编译它,看看是否可行。

关于java - 在 Java 中向 Actor 发送 PoisonPill,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12190202/

相关文章:

java - 类型 Dynamic Web Module 3.0 需要 Java 1.6 或更新版本,java 插件错误

java - 何时使用 Eclipse 64 位

java - 使用 Actors 而不是 `synchronized`

Scala:如何通过元组的第一个元素合并列表

ios - 让 Actor 重复自己的赛车主题

f# - 如何避免对 Actor 实例的可变引用

java - 打包在 Windows 上运行的 Java 软件的最佳方式是什么?

java - 为什么在Java中的文件输入输出代码中出现一些错误?

scala - 可以通过 ISNUMERIC 函数过滤 Spark 数据帧吗?

xml - 无法选择正确的组合器进行解析并在 Scala 中处理它