java - 如何在没有行为 create() 的情况下构建 akka 项目?

问题描述

我是 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();
   }

这并不能解决所有问题,但可以为您提供一个实验基础,并尝试添加背景行为后会发生什么。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...