如何访问Akka演员“;“从外面”;应用程序的名称?通过其pid或等效物?

如何访问Akka演员“;“从外面”;应用程序的名称?通过其pid或等效物?,akka,Akka,上下文:一个无状态Web服务(在Glassfish上运行),它使用Akka参与者来运行作业。此服务的结果存储在数据库中 web服务客户端用于启动web服务的作业。这部分很好用。我现在需要的是,在另一个会话中,web客户端可以发送作业指令(我的Akka应用程序)以有序方式中断。最好是向顶级参与者发送消息,然后顶级参与者再向其参与者发送更多消息 问题是,我不知道如何向已经运行的akka应用程序的演员发送“来自外部”的消息 任何指针将不胜感激 我可以想出两种不同的方式与你的演员交流 如果客户端知道要向

上下文:一个无状态Web服务(在Glassfish上运行),它使用Akka参与者来运行作业。此服务的结果存储在数据库中

web服务客户端用于启动web服务的作业。这部分很好用。我现在需要的是,在另一个会话中,web客户端可以发送作业指令(我的Akka应用程序)以有序方式中断。最好是向顶级参与者发送消息,然后顶级参与者再向其参与者发送更多消息

问题是,我不知道如何向已经运行的akka应用程序的演员发送“来自外部”的消息


任何指针将不胜感激

我可以想出两种不同的方式与你的演员交流

  • 如果客户端知道要向其发送消息的参与者的名称,并且启用了Remoting(),则可以创建ActorSystem客户端,将ActorSelection发送给相关参与者,并使用此ActorSelection发送消息
  • 您可以使用spray()之类的工具来创建一个服务,用于侦听来自客户端的任何消息
  • 不久前,我做了类似的事情,从网络客户端与我的ActorSystem进行对话。哪一种看起来像这样:

    import akka.actor.{ActorLogging, Actor}
    import scala.concurrent.duration._
    import spray.http._
    import HttpMethods._
    
    
    class LoggingService extends Actor with ActorLogging {
      implicit val timeout = 1.second
    
    
      def receive = {
        case HttpRequest(POST, "/logging", _, entity, _) =>
          val interaction = entity.asString.asJson.convertTo[UserActivity]
    
          interaction match {
            case UserActivity(program, time, "WebActivity:begin", uri, title) => ...
          }
    
        case h: HttpRequest =>
          sender ! HttpResponse(StatusCodes.NotFound, entity = "Unknown resource!")
      }
    }
    
    在ActorSystem中,我添加了以下内容以启动服务:

    val system = ActorSystem("logging-server")
    val ioBridge = IOExtension(system).ioBridge
    
    val requestHandler = system.actorOf(Props[LoggingService])
    
    val server = system.actorOf(
        props = Props(new HttpServer(ioBridge, SingletonHandler(requestHandler))),
        name = "logging-service"
    )
    
    
    server ! HttpServer.Bind(uri, port)
    

    ActorRef应该足够了,可以从任何地方向演员发送消息,请详细说明一下?会话是无状态的(我编辑了这个问题以表明它),所以我不确定这会对答案产生什么影响。我对Glassfish了解不多。我的问题是-你能以某种方式获得你想要访问的参与者的ActorRef吗?如果你这样做了,你可以使用它来发送消息,即使你不在一个实际的参与者之内。哦,你的意思是通过使用这里讨论的“参与者路径锚”来访问一个参与者吗?