问题描述
我是 Java akka 的初学者。我对如何让演员在后端和前端进行通信感兴趣。 我正在学习 akka 文档,并在 this page 中使用后端和前端。 在这些示例中,没有 main,我正在尝试这样做以了解代码的工作原理。 由于我不是很先进,我只知道如何通过 Behavior create 来创建和使用 actor,但这些代码不扩展 Abstractactor 并且没有方法 Behavior create()。
我做了这段代码,但我必须初始化actor系统才能使其工作。你能帮我理解命令和响应以及请求接口是如何工作的,因为它们是空的,以及如何使用后端和前端?
public class Main {
@SuppressWarnings("unchecked")
final static ActorSystem<Frontend.Command> system;
//final static ActorRef<Frontend.Command> User = context.spawn(Frontend.WrappedBackendResponse(),"User");
public static void main(String[] args) {
Backend.Response response = new Backend.JobStarted(5);
/*
* final ActorSystem<Translator.Frontend> system =
* ActorSystem.create(Translator.create(),"hello");
*/
system.tell(new Frontend.WrappedBackendResponse(response));
}
}
解决方法
您可以通过创建两个actor系统(后端和前端)来设置该示例中的前端/后端代码的简单版本,如下所示:
public static void main(final String[] args)
{
// Setup a simple backend functionally
final ActorSystem<Backend.Request> backend = ActorSystem.create(Behaviors.setup(ctx -> simpleBackend(ctx)),"backend");
// Setup the frontend via the given class,using the backend actorSystem as a reference
final ActorSystem<Frontend.Command> frontend = ActorSystem.create(Behaviors.setup(ctx -> new Frontend.Translator(ctx,backend)),"frontend");
}
// Simple function to create a behavior as the backend
private static Behavior<Backend.Request> simpleBackend(final ActorContext<Backend.Request> ctx)
{
return Behaviors.receive(Backend.Request.class)
// fill in here with more stuff to actually do the backend handling
.onAnyMessage(any -> {
ctx.getLog().info("Received {}",any);
return Behaviors.same();
})
.build();
}
这并不能解决所有问题,但可以为您提供一个实验基础,并尝试添加背景行为后会发生什么。