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