使用 Akka (Java) 我尝试使用询问模式 (akka.pattern.Patterns.ask),其中询问者是经典演员,被询问者是类型演员。我正在尝试在经典演员中做这样的事情
Patterns.ask(Adapter.toClassic(typedActor), new TypedActor.Message(Adapter.toTyped(self())), timeout));
在键入的演员中,可以看到并回复消息(例如,如下所示),但询问超时
msg.replyTo.tell(new Response());
这可能吗?如果可以,您能帮我举一个简单的例子来说明如何在 Java 中执行此操作吗?
不,绝对不应该这样做。
Patterns.ask
旨在阻塞直到收到响应。在典型的 Actor 消息处理程序中,这是一种非常糟糕的做法,并且可能会导致您看到的超时,因为您将很快耗尽线程。
Actor 被设计为异步的,Actor 之间的通信也应该是异步的。要从一个演员到另一个演员执行类似的操作,请使用
Context.ask
或类似的东西:https://doc.akka.io/docs/akka/current/typed/interaction-patterns.html
这会异步发送您的消息,然后(收到回复时)在处理程序的新执行中调整响应。