是否可以在 Play Framework 2.5 上使用 Java Akka 访问 actor 中的 Http 上下文

Does is it possible access Http context in actor using Java Akka on Play Framework 2.5

我正在使用 JavaAkka 在 Actor 收到任何消息时执行一些任务。当我的演员收到一条消息时,我想从我的一个控制器执行一些功能,但是在这些功能内部使用 http 上下文作为:

ctx().messages().at("sensor_alert");

session().get("id");

我收到错误:

[error] 2017-02-02 13:06:54 -0300 a.a.OneForOneStrategy - There is no HTTP Context available from here.
java.lang.RuntimeException: There is no HTTP Context available from here.
    at play.mvc.Http$Context.current(Http.java:62)
    at play.mvc.Controller.ctx(Controller.java:27)
    at controllers.IpmiMonitorController.gerarAlertas(IpmiMonitorController.java:370)
    at actor.IpmiActor.onReceive(IpmiActor.java:27)
    at akka.actor.UntypedActor$$anonfun$receive.applyOrElse(UntypedActor.scala:165)
    at akka.actor.Actor$class.aroundReceive(Actor.scala:484)
    at akka.actor.UntypedActor.aroundReceive(UntypedActor.scala:95)
    at akka.actor.ActorCell.receiveMessage(ActorCell.scala:526)
    at akka.actor.ActorCell.invoke(ActorCell.scala:495)
    at akka.dispatch.Mailbox.processMailbox(Mailbox.scala:257)

有什么解决办法吗?

您的 HTTP 上下文不应超出您的控制器层,否则您会发现自己的耦合不当。

此外,为什么要从 actor 调用控制器上的方法?控制器旨在处理传入的 HTTP 请求。这个方法有没有可能不属于控制器?

如果您要生成警报,警报将发送到哪里?如果是数据库,则将 DAO 注入 actor。如果它进入一个 HTTP 请求,将一个 Web 服务客户端或类似的注入到 actor 中。