gpt4 book ai didi

java - 使用哪些 Akka Java 类来实现 Future 回调?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:08:37 25 4
gpt4 key购买 nike

Akka Java 在这里。我的类(class):

class SomeActor extends UntypedActor {
// ...
}

class SomeMessage {
// ...
}

// Inside onReceive method for another actor:
Future<Fizz> fizzFut = Patterns.ask(someActor, someMsg, 500)
fizzFut.onComplete(new FizzHandler())

class FizzHandler extends akka.dispatch.OnComplete<Fizz> {
@Override
void onComplete(Throwable error, Fizz result) {
if(error != null) {
// Handle error.
} else {
// Handle success.
}

// TODO: Now how do I send a message back "inside" the
// actor system?
}
}

在运行时我得到以下异常:

[ERROR] [08/23/2015 05:55:09.490] [myapp-akka.actor.default-dispatcher-4]
[akka://myapp/user/AnotherActor] No signature of method:
scala.concurrent.impl.Promise$DefaultPromise.onComplete() is applicable for argument
types: (com.me.myapp.FizzHandler) values: [<function1>]
Possible solutions: onComplete(scala.Function1, scala.concurrent.ExecutionContext),
isCompleted(), complete(scala.util.Try), tryComplete(scala.util.Try)

所以我尝试实现一个 scala.Function 子类,但显然该类是 final 并且无法扩展。

所以这里有两个问题:

  • 我无法理解我应该为我的 onComplete 处理程序使用哪些 Java API 类。有任何想法吗?;和
  • 一旦我开始工作,并且 FizzHandler#onComplete(...) 方法正在运行,我如何在我的 actor 系统“内部”发回消息? 收件箱

最佳答案

在您使用 onComplete 的示例中,您缺少调度程序。 onComplete 有 2 个参数 - handler 函数和 dispatcher 应该用于在准备好后运行回调。所以固定样本是:

    import akka.actor.ActorSystem;
import akka.dispatch.Futures;
import akka.dispatch.OnComplete;
import scala.concurrent.Future;
import scala.runtime.BoxedUnit;

final ActorSystem sys = ActorSystem.create();

final Future<String> successful = Futures.successful("");
successful.onComplete(new OnComplete<String>() {
@Override
public void onComplete(Throwable failure, String success) throws Throwable {

}
}, sys.dispatcher());

请注意,一旦 Scala 2.12 达到稳定版本并且 Akka 使用它(很快)进行编译,它将以与 Java lambda 表达式兼容的方式生成 FunctionN 类,然后您将能够编写 onComplete(d -> {}, dispatcher).

关于java - 使用哪些 Akka Java 类来实现 Future 回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32165564/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com